bereiten
- Kopieren Sie alle Dateien in einem Ordner
- ändern backup-start.sh mit Ihrem Weg und configs
- machen eine Btrfs-Partition
- ein Teilvolumen für den Backup-Pfad erstellen
- schaffen einen Cronjob
Anfang
backup-start.sh täglich backup-start.sh wöchentlich
Backup-Modi
- smb
- sshs
- sshnosymlink
- sshsudoftp
backup-start.sh
#!/bin / bash # überprüfen Sie die Backup-Skript, wenn sein Lauf und wenn ja, dann für einen Schnappschuss calc script_name = / home / backup / backup-script.sh [email protected],[email protected] backup_path = / srv / backup / done snapshot_path = / srv / backup / Schnappschüsse / Backup- $(date +% Y-% m-% d-% H-% M) snapshot_script = / home / eit / backup / services-snapshots.sh ## Skript Start ob [ -von "$1" ];dann Echo "kein Ziel gesetzt" Ausfahrt 1 sonst #Echo "Ziel festlegen" backup_mode = $ 1 fi ## Funktion für die errpr Codes check_error(){ ob [ "$1" -geben "100" ]; dann Echo "Anfang - Sicherung läuft noch" Ausfahrt 1 fi ob [ "$1" -eq "10" ]; dann Echo "Anfang - Sicherung getan - keine Dateien" MODE = $ backup_mode $ snapshot_script $ backup_local_path / $ Server $ snapshot_local_path / $ Server sonst ob [ "$1" -eq "0" ]; dann Echo "Anfang - Sicherung getan - mit Dateien" MODE = $ backup_mode $ snapshot_script $ backup_local_path / $ Server $ snapshot_local_path / $ Server fi fi } script_start(){ ob [ ! -d "$backup_local_path / $ Server" ]; dann Echo "Backup-Ordner nicht vorhanden" Btrfs Subvolume $ backup_local_path erstellen / $ Server chmod 740 $backup_local_path / $ Server Echo "Backup-Ordner erstellt" sonst Echo "Backup-Ordner vorhanden" fi } ## # laufen Backup-Skript ## server = mysvwe1 script_start sh $ script_name $ email_admin $ server / path / to / backup / data $ password backup_local_path ssh username error_now = $? check_error $ error_now Ausfahrt 0
backup-script.sh
#!/bin / bash # # Thomas Mosandl - 2014-11-14 # # apt-get install CIFS-utils sendmail-bin # send~~POS=TRUNC-Config # # definieren Parameter #!/bin / sh # definieren parameterss ## variablen ## 1. Mail an ## 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 ="[email protected]" backup_email_from ="[email protected]" # Ende Config Echo "Sicherung starten - $backup_source_ip" # vaiable Scheck wenn [ -von "$1" ];dann Echo "mail set config" backup_email_to ="$backup_email_to_config" sonst Echo "Mail auf Parameter" backup_email_to = $ 1 fi # überprüfen iSCSI-Ziel #ping -q -c $ backup_check_client_ping $ backup_iscsi_target_1 > /dev / null #ob [ ! $? -eq 0 ]; dann # Echo "ISCSI Ping nicht availible" # Echo " " | mail -s "Sicherungskopie - ISCSI - Ping funktioniert nicht" -ein "Von: $backup_email_from" $backup_email_to # Ausfahrt 1 #sonst # #ob [ $(iscsiadm -m-Sitzung | grep -c "$backup_iscsi_target_1") -eq 0 ]; dann # Echo "ISCSI Berg nicht availible" # Echo " " | mail -s "Sicherungskopie - ISCSI - Mount funktioniert nicht" -ein "Von: $backup_email_from" $backup_email_to # Ausfahrt 1 #sonst # Echo "ISCSI ist in Ordnung" #sein #fi #192.168.144.167 # überprüfen, ob Backup ausgeführt wird ps aux > /tmp / temp.txt ob [ $(Katze /tmp/temp.txt | grep -c "ssh -o StrictHostKeyChecking = no -l") -gt 0 ]; dann Echo "Sicherung war defekt oder nicht ausgeführt" ob [ -f "$backup_log_path / $ backup_log_file.lck" ]; dann rm -rf "$backup_log_path / $ backup_log_file.lck" fi fi rm -rf /tmp/temp.txt ob [ -f "$backup_log_path / $ backup_log_file.lck" ]; dann Echo " " | mail -s "Sicherungskopie - $backup_source_ip - Backup ist immer noch läuft" -r $ backup_email_from $ backup_email_to Echo "Skript - Backup ausgeführt wird" set -e Ausfahrt 100 sonst Echo "Skript - Sicherung nicht noch läuft" berühren "$backup_log_path / $ backup_log_file.lck" fi # überprüfen, ob log in logrotate ist ob [ $(grep -c "$backup_log_path / $ backup_log_file" /etc / logrotate.d / rsyslog) -eq 1 ]; dann Echo "Skript - rsyslog gesetzt" sonst Echo "$backup_log_path / $ backup_log_file {}" >> /etc / logrotate.d / rsyslog Echo "Skript - rsyslog erstellt" fi # ob [ ! $(montieren | grep -c "/Medien / data0 / srv / Backup-Typ Btrfs (rw)") -eq 0 ]; dann Echo "Lagerung nicht montiert" Ausfahrt 11 Echo " " | mail -s "Sicherungskopie - Lagerung nicht montiert" -r $ backup_email_from $ backup_email_to sonst Echo "Lagerung montiert" fi # Ordner erstellen # überprüfen Backup-Verzeichnis ob [ ! -d "$backup_dest_path" ]; dann Echo "Backup-Ordner nicht vorhanden" mkdir -p $ backup_dest_path chmod 740 $backup_dest_path Echo "Backup-Ordner erstellt" sonst Echo "Backup-Ordner vorhanden" fi ob [ ! -d "$backup_log_path" ]; dann Echo "Backup-Protokollordner nicht vorhanden" mkdir -p $ backup_log_path Echo "Backup-Protokollordner erstellt" sonst Echo "Backup-Protokollordner vorhanden" fi # nslookup Scheck nslookup $ backup_source_ip > /dev / null ob [ ! $? -eq 0 ]; dann Echo "DNS funktioniert nicht für $ backup_source_ip" Echo " " | mail -s "Sicherungskopie - $backup_source_ip - nslookup funktioniert nicht für $ backup_source_ip" -r $ backup_email_from $ backup_email_to rm -rf "$backup_log_path / $ backup_log_file.lck" set -e Ausfahrt 1 sonst Echo "DNS ist in Ordnung" fi # Ping-Check ob [ ! $backup_source_ip = "server.de" ]; dann ping -q -c $ backup_check_client_ping $ backup_source_ip > /dev / null ob [ ! $? -eq 0 ]; dann Echo "PING funktioniert nicht für $ backup_source_ip" Echo " " | mail -s "Sicherungskopie - $backup_source_ip - ping $ backup_source_ip nicht funktioniert" -r $ backup_email_from $ backup_email_to rm -rf "$backup_log_path / $ backup_log_file.lck" set -e Ausfahrt 1 sonst Echo "Ping ist in Ordnung" sein sein # rsync echo $ backup_service ob [ $backup_service = ssh ]; dann 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 ob [ ! $? -geben 0 ]; dann Echo "Backup-Fehler - $?" Katze -v $ backup_log_path / $ backup_log_file | mail -s "Sicherungskopie - $backup_source_ip - Fehler-Backup - $?" -ein "Von: $backup_email_from" $backup_email_to set -e Ausfahrt 1 sonst Echo "Backup ist in Ordnung" ob [ ! $(grep -c "Anzahl der erstellten Dateien: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; dann mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup - keine Dateien" -r $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp Echo "Skript - keine Dateien" exit_code ="10" sonst Katze -v $ backup_log_path / $ log_file_temp | mail -s "Sicherungskopie - $backup_source_ip - Fertig-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 ]; dann 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 ob [ ! $? -geben 0 ]; dann Echo "Backup-Fehler - $?" Katze -v $ backup_log_path / $ backup_log_file | mail -s "Sicherungskopie - $backup_source_ip - Fehler-Backup - $?" -ein "Von: $backup_email_from" $backup_email_to set -e Ausfahrt 1 sonst Echo "Backup ist in Ordnung" ob [ ! $(grep -c "Anzahl der erstellten Dateien: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; dann mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup - keine Dateien" -r $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp Echo "Skript - keine Dateien" exit_code ="10" sonst Katze -v $ backup_log_path / $ log_file_temp | mail -s "Sicherungskopie - $backup_source_ip - Fertig-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 ]; dann 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 "*Benutzer / Daten *" --ausschließen "*Benutzer / * / Daten *" --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 ob [ ! $? -geben 0 ]; dann Echo "Backup-Fehler - $?" Katze -v $ backup_log_path / $ backup_log_file | mail -s "Sicherungskopie - $backup_source_ip - Fehler-Backup - $?" -ein "Von: $backup_email_from" $backup_email_to set -e Ausfahrt 1 sonst Echo "Backup ist in Ordnung" ob [ ! $(grep -c "Anzahl der erstellten Dateien: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; dann mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup - keine Dateien" -r $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp Echo "Skript - keine Dateien" exit_code ="10" sonst Katze -v $ backup_log_path / $ log_file_temp | mail -s "Sicherungskopie - $backup_source_ip - Fertig-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 ]; dann # Mount-Backup mount -t cifs // $ backup_source_ip / $ backup_source_path $ backup_mount_path -o username = $ backup_source_user,Passwort = $ backup_source_pw,ro,sec = ntlm ob [ ! $? -eq 0 ]; dann Echo "Berg ist nicht in Ordnung - $?" Echo " " | mail -s "Sicherungskopie - $backup_source_ip - mount -t cifs // $ backup_source_ip / $ backup_source_path $ backup_mount_path nicht funktioniert" -ein "Von: $backup_email_from" $backup_email_to rm -rf "$backup_log_path / $ backup_log_file.lck" set -e Ausfahrt 1 sonst Echo "Berg ist in Ordnung" 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 ob [ ! $? -geben 0 ]; dann Echo "Backup-Fehler - $?" Katze -v $ backup_log_path / $ backup_log_file | mail -s "Sicherungskopie - $backup_source_ip - Fehler-Backup - $?" -ein "Von: $backup_email_from" $backup_email_to set -e Ausfahrt 1 sonst Echo "Backup ist in Ordnung" 199,2-9 92% sonst Echo "Backup ist in Ordnung" ob [ ! $(grep -c "Anzahl der erstellten Dateien: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; dann Katze -v $ backup_log_path / $ log_file_temp | mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup - keine Dateien" -ein "Von: $backup_email_from" $backup_email_to Echo "Skript - keine Dateien" exit_code ="10" sonst Katze -v $ backup_log_path / $ log_file_temp | mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup" -ein "Von: $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 # aushängen rm -rf "$backup_log_path / $ backup_log_file.lck" Ausfahrt $ exit_code
services-snapshots.sh
#!/bin / bash set -e ob [[ -z $ MODE ]]; dann Echo "$MODE nicht angegeben" Ausfahrt 1 fi ob [[ $UID -nicht 0 ]]; dann Echo "Muss als root ausgeführt werden" Ausfahrt 1 fi ob [ -von "$1" ];dann Echo "nicht Quellen gesetzt" Ausfahrt 1 sonst Echo "Set Source" BACKUP_SOURCE_DIR = $ 1 fi ob [ -von "$2" ];dann Echo "kein Ziel gesetzt" Ausfahrt 1 sonst Echo "Ziel festlegen" BACKUP_BASE_DIR = $ 2 fi BACKUP_DIR_DAILY = ${BACKUP_BASE_DIR}/täglich BACKUP_DIR_WEEKLY = ${BACKUP_BASE_DIR}/wöchentlich BACKUP_DIR_MONTHLY = ${BACKUP_BASE_DIR}/monatlich BACKUP_DIR_YEARLY = ${BACKUP_BASE_DIR}/jährlich ob [ ! -d "$BACKUP_DIR_DAILY" ]; dann Echo "Backup-Ordner nicht vorhanden" mkdir -p $ BACKUP_DIR_DAILY chmod 740 $BACKUP_DIR_DAILY Echo "Backup-Ordner erstellt" sonst Echo "Backup-Ordner vorhanden" fi ob [ ! -d "$BACKUP_DIR_WEEKLY" ]; dann Echo "Backup-Ordner nicht vorhanden" mkdir -p $ BACKUP_DIR_WEEKLY chmod 740 $BACKUP_DIR_WEEKLY Echo "Backup-Ordner erstellt" sonst Echo "Backup-Ordner vorhanden" fi ob [ ! -d "$BACKUP_DIR_MONTHLY" ]; dann Echo "Backup-Ordner nicht vorhanden" mkdir -p $ BACKUP_DIR_MONTHLY chmod 740 $BACKUP_DIR_MONTHLY Echo "Backup-Ordner erstellt" sonst Echo "Backup-Ordner vorhanden" fi ob [ ! -d "$BACKUP_DIR_YEARLY" ]; dann Echo "Backup-Ordner nicht vorhanden" mkdir -p $ BACKUP_DIR_YEARLY chmod 740 $BACKUP_DIR_YEARLY Echo "Backup-Ordner erstellt" sonst Echo "Backup-Ordner vorhanden" 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 ob [[ $MODE = "TÄGLICH" ]]; dann BACKUP_DIR = $ BACKUP_DIR_DAILY NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_DAILY Elif [[ $MODE = "WÖCHENTLICH" ]]; dann BACKUP_DIR = $ BACKUP_DIR_WEEKLY NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_WEEKLY Elif [[ $MODE = "MONATLICH" ]]; dann BACKUP_DIR = $ BACKUP_DIR_MONTHLY NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_MONTHLY Elif [[ $MODE = "JÄHRLICH" ]]; dann BACKUP_DIR = $ BACKUP_DIR_YEARLY NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_YEARLY sonst Echo "verfügbar $ MODE Werte: TÄGLICH, MONATLICH, WÖCHENTLICH, JÄHRLICH" Ausfahrt 1 fi NUM_FILES_TO_KEEP = $(( $NUM_FILES_TO_KEEP + 1 )) _backup () { /sbin / Btrfs Subvolume Snapshot -r $ BACKUP_SOURCE_DIR ${BACKUP_DIR}/Backup- $(date +% Y-% m-% d) } _Aufräumen () { für Datei in $(ls -rt $ BACKUP_DIR | tail -n +${NUM_FILES_TO_KEEP} ); machen sudo Btrfs Subvolume löschen ${BACKUP_DIR}/$Datei erledigt } _backup _Aufräumen