preparare
- copiare tutti i file in una cartella
- modificare backup-start.sh con il percorso e configurazioni
- fare una partizione btrfs
- creare un volume secondario per il percorso di backup
- creare un cronjob
inizio
backup-start.sh quotidiano settimanale backup-start.sh
modalità di backup
- smb
- SSHS
- sshnosymlink
- sshsudoftp
backup-start.sh
#!/bin / bash # controllare lo script di backup se il suo funzionamento e, se sì allora CALC per un'istantanea script_name = / home / backup / backup-script.sh email_admin=mail1@mail.de,mail2@mail.de backup_path = / srv / backup / fatto snapshot_path = / srv / backup / snapshot / backup-$(date +% Y-% m-% d-% H-% M) snapshot_script = / home / EIT / backup / services-snapshots.sh ## Avviare Script Se [ -da "$1" ];poi eco "nessun insieme di destinazione" Uscita 1 altro #eco "obiettivo fissato" backup_mode = $ 1 fi ## Funzione per i codici errpr check_error(){ Se [ "$1" -dare "100" ]; poi eco "Inizio - Backup ancora in corso" Uscita 1 fi Se [ "$1" -eq "10" ]; poi eco "Inizio - Backup fatto - nessun documento" MODE = $ backup_mode $ snapshot_script $ backup_local_path / $ server $ snapshot_local_path / $ server altro Se [ "$1" -eq "0" ]; poi eco "Inizio - Backup fatto - con i file" MODE = $ backup_mode $ snapshot_script $ backup_local_path / $ server $ snapshot_local_path / $ server fi fi } script_start(){ Se [ ! -d "$backup_local_path / $ server" ]; poi eco "cartella di backup non esiste" btrfs sottovolume creare $ backup_local_path / $ server chmod 740 $backup_local_path / $ server eco "cartella di backup creata" altro eco "cartella di backup esiste" fi } ## # eseguire script di backup ## server = mysvwe1 script_start sh $ nome_script $ email_admin $ server / path / to / backup / dati $ backup_local_path la password SSH nome utente error_now = $? check_error $ error_now Uscita 0
backup-script.sh
#!/bin / bash # # Thomas Mosandl - 2014-11-14 # # apt-get install CIFS-utils sendmail-bin # sendmail config # # definire il parametro #!/bin / sh # definire parameterss ## variabili ## 1. mail a ## 2. backup_source_ip ## 3. backup_source_path ## 4. backup_dest_path backup_source_ip = $ 2 backup_source_path = $ 3 backup_source_user = $ 6 backup_source_domain = 'ASD' backup_source_pw = $ 7 backup_log_path = / var / log backup_check_client_ping ="1" backup_service = $ 5 backup_dest_path = $ 4 / $ backup_source_ip backup_log_path = / var / log backup_log_file = backup_ $ backup_source_ip backup_email_to_config ="thomas.mosandl@mosandl.eu" backup_email_from ="backup@mosandl.eu" # config fine eco "Avvia backup - $backup_source_ip" # controllo vaiable se [ -da "$1" ];poi eco "elettronica impostata su config" backup_email_to ="$backup_email_to_config" altro eco "mail impostato al parametro" backup_email_to = $ 1 fi # controllare la destinazione iSCSI #ping -q -c $ backup_check_client_ping $ backup_iscsi_target_1 > /dev / null #Se [ ! $? -eq 0 ]; poi # eco "ISCSI Ping non availible" # eco " " | -s posta "di riserva - ISCSI - Ping non funziona" -un "Da parte di: $backup_email_from" $backup_email_to # Uscita 1 #altro # #Se [ $(iscsiadm sessione -m | grep -c "$backup_iscsi_target_1") -eq 0 ]; poi # eco "ISCSI Monte non availible" # eco " " | -s posta "di riserva - ISCSI - Monte non funziona" -un "Da parte di: $backup_email_from" $backup_email_to # Uscita 1 #altro # eco "ISCSI è ok" #essere #fi #192.168.144.167 # verificare se il backup è in esecuzione ps aux > /tmp / temp.txt Se [ $(cat /tmp/temp.txt | grep -c "ssh -o StrictHostKeyChecking = no -l") -gt 0 ]; poi eco "backup è stato rotto o non è in esecuzione" Se [ -f "$backup_log_path / $ backup_log_file.lck" ]; poi rm-rf "$backup_log_path / $ backup_log_file.lck" fi fi rm -rf /tmp/temp.txt Se [ -f "$backup_log_path / $ backup_log_file.lck" ]; poi eco " " | -s posta "di riserva - $backup_source_ip - Backup è ancora in esecuzione" -R $ backup_email_from $ backup_email_to eco "copione - backup è in esecuzione" set -e Uscita 100 altro eco "copione - backup non è ancora in esecuzione" toccare "$backup_log_path / $ backup_log_file.lck" fi # controllare se log è in logrotate Se [ $(grep -c "$backup_log_path / $ backup_log_file" /etc / logrotate.d / rsyslog) -eq 1 ]; poi eco "copione - rsyslog è impostato" altro eco "$backup_log_path / $ backup_log_file {}" >> /etc / logrotate.d / rsyslog eco "copione - rsyslog creato" fi # Se [ ! $(montare | grep -c "/media / DATA0 tipo / srv / backup btrfs (rw)") -eq 0 ]; poi eco "stoccaggio non montato" Uscita 11 eco " " | -s posta "di riserva - stoccaggio non montato" -R $ backup_email_from $ backup_email_to altro eco "stoccaggio è montato" fi # creare cartelle # controllare dir di backup Se [ ! -d "$backup_dest_path" ]; poi eco "cartella di backup non esiste" mkdir -p $ backup_dest_path chmod 740 $backup_dest_path eco "cartella di backup creata" altro eco "cartella di backup esiste" fi Se [ ! -d "$backup_log_path" ]; poi eco "cartella di registro di backup non esiste" mkdir -p $ backup_log_path eco "cartella di registro di backup creato" altro eco "cartella di registro di backup esiste" fi # controllo nslookup nslookup $ backup_source_ip > /dev / null Se [ ! $? -eq 0 ]; poi eco "DNS non funziona per $ backup_source_ip" eco " " | -s posta "di riserva - $backup_source_ip - nslookup non funziona per $ backup_source_ip" -R $ backup_email_from $ backup_email_to rm-rf "$backup_log_path / $ backup_log_file.lck" set -e Uscita 1 altro eco "DNS è ok" fi # controllo ping Se [ ! $backup_source_ip = "server.de" ]; poi ping -q -c $ backup_check_client_ping $ backup_source_ip > /dev / null Se [ ! $? -eq 0 ]; poi eco "PING non funziona per $ backup_source_ip" eco " " | -s posta "di riserva - $backup_source_ip - ping $ backup_source_ip non funziona" -R $ backup_email_from $ backup_email_to rm-rf "$backup_log_path / $ backup_log_file.lck" set -e Uscita 1 altro eco "Ping è ok" essere essere # rsync echo $ backup_service Se [ $backup_service = SSH ]; poi exit_code ="0" log_file_temp = $ backup_log_file_ $(date +% Y_% M_% d_% H_% M_% S) export SSHPASS = $ backup_source_pw ionice -c 3 rsync -rptgoDvzLKh --delete --rsh ="/usr / bin / sshpass -e ssh -o StrictHostKeyChecking = no -l $ backup_source_user " $backup_source_ip:$backup_source_path $ backup_dest_path --log-file = $ backup_log_path / $ log_file_temp --stats >> $backup_log_path / $ log_file_temp Se [ ! $? -dare 0 ]; poi eco "errore di backup - $?" cat -v $ backup_log_path / $ backup_log_file | -s posta "di riserva - $backup_source_ip - Backup Errore - $?" -un "Da parte di: $backup_email_from" $backup_email_to set -e Uscita 1 altro eco "Backup è ok" Se [ ! $(grep -c "Numero di file creati: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; poi -s posta "di riserva - $backup_source_ip - fatto Backup - nessun documento" -R $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp eco "copione - nessun documento" exit_code ="10" altro cat -v $ backup_log_path / $ log_file_temp | -s posta "di riserva - $backup_source_ip - fatto Backup" -R $ backup_email_from $ backup_email_to fi cat $ backup_log_path / $ log_file_temp >> $backup_log_path / $ backup_log_file rm $ backup_log_path / $ log_file_temp fi Elif [ $backup_service = sshnosymlink ]; poi exit_code ="0" log_file_temp = $ backup_log_file_ $(date +% Y_% M_% d_% H_% M_% S) export SSHPASS = $ backup_source_pw ionice -c 3 rsync -rptgoDvzlKh --delete --rsh ="/usr / bin / sshpass -e ssh -o StrictHostKeyChecking = no -l $ backup_source_user " $backup_source_ip:$backup_source_path $ backup_dest_path --log-file = $ backup_log_path / $ log_file_temp --stats >> $backup_log_path / $ log_file_temp Se [ ! $? -dare 0 ]; poi eco "errore di backup - $?" cat -v $ backup_log_path / $ backup_log_file | -s posta "di riserva - $backup_source_ip - Backup Errore - $?" -un "Da parte di: $backup_email_from" $backup_email_to set -e Uscita 1 altro eco "Backup è ok" Se [ ! $(grep -c "Numero di file creati: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; poi -s posta "di riserva - $backup_source_ip - fatto Backup - nessun documento" -R $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp eco "copione - nessun documento" exit_code ="10" altro cat -v $ backup_log_path / $ log_file_temp | -s posta "di riserva - $backup_source_ip - fatto Backup" -R $ backup_email_from $ backup_email_to fi cat $ backup_log_path / $ log_file_temp >> $backup_log_path / $ backup_log_file rm $ backup_log_path / $ log_file_temp fi Elif [ $backup_service = sshsudoftp ]; poi exit_code ="0" log_file_temp = $ backup_log_file_ $(date +% Y_% M_% d_% H_% M_% S) export SSHPASS = $ backup_source_pw ionice -c 3 rsync -rptgoDzLKh --delete --exclude "*gli utenti / dati *" --escludere "*gli utenti / * / dati *" --rsync-path ="sudo rsync" --rsh ="/usr / bin / sshpass -e ssh -o StrictHostKeyChecking = no -l $ backup_source_user " $backup_source_ip:$backup_source_path $ backup_dest_path --log-file = $ backup_log_path / $ log_file_temp --stats >> $backup_log_path / $ log_file_temp Se [ ! $? -dare 0 ]; poi eco "errore di backup - $?" cat -v $ backup_log_path / $ backup_log_file | -s posta "di riserva - $backup_source_ip - Backup Errore - $?" -un "Da parte di: $backup_email_from" $backup_email_to set -e Uscita 1 altro eco "Backup è ok" Se [ ! $(grep -c "Numero di file creati: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; poi -s posta "di riserva - $backup_source_ip - fatto Backup - nessun documento" -R $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp eco "copione - nessun documento" exit_code ="10" altro cat -v $ backup_log_path / $ log_file_temp | -s posta "di riserva - $backup_source_ip - fatto Backup" -R $ backup_email_from $ backup_email_to fi cat $ backup_log_path / $ log_file_temp >> $backup_log_path / $ backup_log_file rm $ backup_log_path / $ log_file_temp fi Elif [ $backup_service = smb ]; poi # il backup di montaggio mount -t cifs // $ backup_source_ip / $ backup_source_path $ backup_mount_path -o username = $ backup_source_user,password = $ backup_source_pw,ro,sec = NTLM Se [ ! $? -eq 0 ]; poi eco "Monte non è a posto - $?" eco " " | -s posta "di riserva - $backup_source_ip - mount -t cifs // $ backup_source_ip / $ backup_source_path $ backup_mount_path non funziona" -un "Da parte di: $backup_email_from" $backup_email_to rm-rf "$backup_log_path / $ backup_log_file.lck" set -e Uscita 1 altro eco "Mount va bene" fi # rsync exit_code ="0" log_file_temp = $ backup_log_file_ $(date +% Y_% M_% d_% H_% M_% S) rsync -rlptDvz $ backup_mount_path $ backup_dest_path --log-file = $ backup_log_path / $ log_file_temp --stats --chmod = u = rwx,g = rx,O = rx >> $backup_log_path / $ log_file_temp Se [ ! $? -dare 0 ]; poi eco "errore di backup - $?" cat -v $ backup_log_path / $ backup_log_file | -s posta "di riserva - $backup_source_ip - Backup Errore - $?" -un "Da parte di: $backup_email_from" $backup_email_to set -e Uscita 1 altro eco "Backup è ok" 199,2-9 92% altro eco "Backup è ok" Se [ ! $(grep -c "Numero di file creati: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; poi cat -v $ backup_log_path / $ log_file_temp | -s posta "di riserva - $backup_source_ip - fatto Backup - nessun documento" -un "Da parte di: $backup_email_from" $backup_email_to eco "copione - nessun documento" exit_code ="10" altro cat -v $ backup_log_path / $ log_file_temp | -s posta "di riserva - $backup_source_ip - fatto Backup" -un "Da parte di: $backup_email_from" $backup_email_to fi cat $ backup_log_path / $ log_file_temp >> $backup_log_path / $ backup_log_file rm $ backup_log_path / $ log_file_temp fi fi # smontare rm-rf "$backup_log_path / $ backup_log_file.lck" exit $ exit_code
services-snapshots.sh
#!/bin / bash set -e Se [[ -z $ MODE ]]; poi eco "$MODE non specificata" Uscita 1 fi Se [[ $UID -non 0 ]]; poi eco "Deve essere eseguito come root" Uscita 1 fi Se [ -da "$1" ];poi eco "Non fonti impostate" Uscita 1 altro eco "Imposta origine" BACKUP_SOURCE_DIR = $ 1 fi Se [ -da "$2" ];poi eco "nessun insieme di destinazione" Uscita 1 altro eco "obiettivo fissato" BACKUP_BASE_DIR = $ 2 fi BACKUP_DIR_DAILY = ${BACKUP_BASE_DIR}/quotidiano BACKUP_DIR_WEEKLY = ${BACKUP_BASE_DIR}/settimanalmente BACKUP_DIR_MONTHLY = ${BACKUP_BASE_DIR}/mensile BACKUP_DIR_YEARLY = ${BACKUP_BASE_DIR}/annuale Se [ ! -d "$BACKUP_DIR_DAILY" ]; poi eco "cartella di backup non esiste" mkdir -p $ BACKUP_DIR_DAILY chmod 740 $BACKUP_DIR_DAILY eco "cartella di backup creata" altro eco "cartella di backup esiste" fi Se [ ! -d "$BACKUP_DIR_WEEKLY" ]; poi eco "cartella di backup non esiste" mkdir -p $ BACKUP_DIR_WEEKLY chmod 740 $BACKUP_DIR_WEEKLY eco "cartella di backup creata" altro eco "cartella di backup esiste" fi Se [ ! -d "$BACKUP_DIR_MONTHLY" ]; poi eco "cartella di backup non esiste" mkdir -p $ BACKUP_DIR_MONTHLY chmod 740 $BACKUP_DIR_MONTHLY eco "cartella di backup creata" altro eco "cartella di backup esiste" fi Se [ ! -d "$BACKUP_DIR_YEARLY" ]; poi eco "cartella di backup non esiste" mkdir -p $ BACKUP_DIR_YEARLY chmod 740 $BACKUP_DIR_YEARLY eco "cartella di backup creata" altro eco "cartella di backup esiste" fi NUM_FILES_TO_KEEP_DAILY = 10 NUM_FILES_TO_KEEP_WEEKLY = 20 NUM_FILES_TO_KEEP_MONTHLY = 12 NUM_FILES_TO_KEEP_YEARLY = 10 Se [[ $MODE = "QUOTIDIANO" ]]; poi BACKUP_DIR = $ BACKUP_DIR_DAILY NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_DAILY Elif [[ $MODE = "SETTIMANALMENTE" ]]; poi BACKUP_DIR = $ BACKUP_DIR_WEEKLY NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_WEEKLY Elif [[ $MODE = "MENSILE" ]]; poi BACKUP_DIR = $ BACKUP_DIR_MONTHLY NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_MONTHLY Elif [[ $MODE = "ANNUALE" ]]; poi BACKUP_DIR = $ BACKUP_DIR_YEARLY NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_YEARLY altro eco "I valori disponibili $ MODE sono: QUOTIDIANO, MENSILE, SETTIMANALMENTE, ANNUALE" Uscita 1 fi NUM_FILES_TO_KEEP = $(( $NUM_FILES_TO_KEEP + 1 )) _backup () { /sbin / btrfs sottovolume istantanea -r $ BACKUP_SOURCE_DIR ${BACKUP_DIR}/backup-$(date +% Y-% m-% d) } _pulire () { per il file in $(ls -rt $ BACKUP_DIR | tail -n +${NUM_FILES_TO_KEEP} ); fare btrfs sudo sottovolume cancellare ${BACKUP_DIR}/$file fatto } _backup _pulire