⇤ ← Revision 1 as of 2017-08-10 15:01:28
683
Comment:
|
4560
|
Deletions are marked like this. | Additions are marked like this. |
Line 18: | Line 18: |
== Backup su storage remoto dei dump == Questo script si "aggancia" al sistema di backup interno di PVE, allo scopo di fare una seconda copia dei dump delle VM su uno storage esterno (smb, nfs, usb, qualsiasi cosa si possa montare). Questo script cosi` come e` fatto tiene 6 backup settimanali e 4 mensili, quindi sono 10 backup. Tenete bene conto dello spazio necessario! Ad ogni esecuzione di un job di backup, una volta eseguiti i dump di tutte le VM, questo script copia tutti i dump sullo storage remoto, dopo aver archiviato quelli precedenti dentro le directory "daily" e "weekly". * Prima di tutto, creare lo script e renderlo eseguibile. Io lo chiamo {{{/root/pve-remote-backup.sh}}}. {{{ #!/bin/bash # Impostazioni: listfile="/tmp/pve-remote-backup-filelist.txt" mountpoint="/mnt" # all'inizio del job, mi assicuro di cancellare # la lista dei files if [ "$1" == "job-start" ]; then echo "JOB-START: cancello la lista dei files" [ -f $listfile ] && rm $listfile exit 0 fi # alla fine del singolo backup mi segno il nome # del file che e` stato creato, salvandolo in /tmp/ if [ "$1" == "backup-end" ]; then echo "BACKUP-END: salvo il nome del file" echo $TARFILE >> $listfile fi # alla fine del job, # monto lo storage remoto, ruoto i vecchi backup se necessario, # e copio tutti i files del backup attuale sullo storage remoto if [ "$1" == "job-end" ]; then echo "JOB-END: Monto lo storage remoto" mount -t cifs //nas/pvebackup $mountpoint -o user=serverbackup,pass=password if mountpoint -q $mountpoint; then echo "JOB-END: Storage remoto montato" # Eseguo la rotazione dei vecchi backup usando una sequenza # di 6 giornalieri e 4 settimanali con savelog. Se e` domenica # eseguo il settimanale, altrimenti il giornaliero # check se ci sono files da ruotare ls $mountpoint/vzdump* >/dev/null 2>&1 if [ $? -eq 0 ] then # Ci sono files da ruotare echo "JOB-END: Ruoto i vecchi files sullo storage" if [[ $(date +%u) -eq 7 ]] ; then # se e` domenica salvo in weekly e ne tengo 4 savelog -c4 -l -r weekly $mountpoint/vzdump* else # se e` un altro giorno salvo in daily e ne tengo 6 savelog -c6 -l -r daily $mountpoint/vzdump* fi else # Non ci sono files da ruotare echo "JOB-END: Non ci sono vecchi files da ruotare sullo storage" fi # Leggo la lista dei files da copiare e li copio rinominandoli # in modo da togliere il timestamp. while IFS= read -r line do nopath=`echo $line | awk 'END{ n=split ($NF,a,"/"); print a[n]}'` destination=`echo $nopath | awk -F[-.] '{ print $1 "-" $2 "-" $3 "." $6 "." $7}'` if [[ -z "${line// }" ]] ; then echo "JOB-END: ERRORE, trovata una linea vuota nell'elenco di input - la ignoro" else echo "JOB-END: Copio $line su $mountpoint/$destination" cp $line $mountpoint/$destination fi done <"$listfile" # Fine della copia, smonto e ho finito. echo "JOB-END: Smonto lo storage remoto" umount /mnt exit 0 else echo "JOB-END: ERRORE, storage remoto non accessibile" exit 1 fi fi }}} * Secondariamente, modificare lo script in modo da fare il mount del vostro storage remoto preferito * Per finire, modificare il file {{{/etc/vzdump.conf}}} inserendo una riga che dice di usare lo script durante i job di backup: {{{ script: /root/pve-remote-backup.sh }}} |
PVE ovvero Proxmox Virtual Environment
PVE e` un sistema di virtualizzazione basato su Debian (purtroppo con systemd) e KVM. Ottimo ed economico anche se si vuole comperare il supporto commerciale.
Questi sono appunti sparsi sul setup di un singolo host con PVE versione 4.4 e un raid1 con ZFS.
Configurazione di un sistema di allarme per email se il raidz di zfs va in degraded
Non e` proprio un avviso in tempo reale, ma queste righe aggiunte al crontab permettono di avere un allarme sufficientemente tempestivo, si spera.
# allarme se si rompe zfs. MAILTO=youremail@example.com 00 6,12,20 * * * root zpool status | grep DEGRADED
Backup su storage remoto dei dump
Questo script si "aggancia" al sistema di backup interno di PVE, allo scopo di fare una seconda copia dei dump delle VM su uno storage esterno (smb, nfs, usb, qualsiasi cosa si possa montare). Questo script cosi` come e` fatto tiene 6 backup settimanali e 4 mensili, quindi sono 10 backup. Tenete bene conto dello spazio necessario! Ad ogni esecuzione di un job di backup, una volta eseguiti i dump di tutte le VM, questo script copia tutti i dump sullo storage remoto, dopo aver archiviato quelli precedenti dentro le directory "daily" e "weekly".
Prima di tutto, creare lo script e renderlo eseguibile. Io lo chiamo /root/pve-remote-backup.sh.
# Impostazioni: listfile="/tmp/pve-remote-backup-filelist.txt" mountpoint="/mnt" # all'inizio del job, mi assicuro di cancellare # la lista dei files if [ "$1" == "job-start" ]; then echo "JOB-START: cancello la lista dei files" [ -f $listfile ] && rm $listfile exit 0 fi # alla fine del singolo backup mi segno il nome # del file che e` stato creato, salvandolo in /tmp/ if [ "$1" == "backup-end" ]; then echo "BACKUP-END: salvo il nome del file" echo $TARFILE >> $listfile fi # alla fine del job, # monto lo storage remoto, ruoto i vecchi backup se necessario, # e copio tutti i files del backup attuale sullo storage remoto if [ "$1" == "job-end" ]; then echo "JOB-END: Monto lo storage remoto" mount -t cifs //nas/pvebackup $mountpoint -o user=serverbackup,pass=password if mountpoint -q $mountpoint; then echo "JOB-END: Storage remoto montato" # Eseguo la rotazione dei vecchi backup usando una sequenza # di 6 giornalieri e 4 settimanali con savelog. Se e` domenica # eseguo il settimanale, altrimenti il giornaliero # check se ci sono files da ruotare ls $mountpoint/vzdump* >/dev/null 2>&1 if [ $? -eq 0 ] then # Ci sono files da ruotare echo "JOB-END: Ruoto i vecchi files sullo storage" if [[ $(date +%u) -eq 7 ]] ; then # se e` domenica salvo in weekly e ne tengo 4 savelog -c4 -l -r weekly $mountpoint/vzdump* else # se e` un altro giorno salvo in daily e ne tengo 6 savelog -c6 -l -r daily $mountpoint/vzdump* fi else # Non ci sono files da ruotare echo "JOB-END: Non ci sono vecchi files da ruotare sullo storage" fi # Leggo la lista dei files da copiare e li copio rinominandoli # in modo da togliere il timestamp. while IFS= read -r line do nopath=`echo $line | awk 'END{ n=split ($NF,a,"/"); print a[n]}'` destination=`echo $nopath | awk -F[-.] '{ print $1 "-" $2 "-" $3 "." $6 "." $7}'` if [[ -z "${line// }" ]] ; then echo "JOB-END: ERRORE, trovata una linea vuota nell'elenco di input - la ignoro" else echo "JOB-END: Copio $line su $mountpoint/$destination" cp $line $mountpoint/$destination fi done <"$listfile" # Fine della copia, smonto e ho finito. echo "JOB-END: Smonto lo storage remoto" umount /mnt exit 0 else echo "JOB-END: ERRORE, storage remoto non accessibile" exit 1 fi fi
- Secondariamente, modificare lo script in modo da fare il mount del vostro storage remoto preferito
Per finire, modificare il file /etc/vzdump.conf inserendo una riga che dice di usare lo script durante i job di backup:
script: /root/pve-remote-backup.sh