Shell skrypt do backupu – Okna SMB / Linux Server

przygotować

  • skopiować wszystkie pliki w jednym folderze
  • modyfikować backup-start.sh ze swojej drogi i configs
  • zrobić partycję Btrfs
  • tworzyć podwolumen dla ścieżki kopii zapasowej
  • stworzyć cronjob

początek

backup-start.sh codziennie
backup-start.sh tygodniowo

tryby zapasowe

  • SMB
  • sshs
  • sshnosymlink
  • sshsudoftp

backup-start.sh

#!/bin / bash
# sprawdzić skrypt kopii zapasowej, jeżeli jego prowadzenie, a jeśli tak, to obliczony dla migawka
nazwa_skryptu = / home / backup / backup-script.sh
email_admin=mail1@mail.de,mail2@mail.de
BACKUP_PATH = / srv / backup / zrobić
snapshot_path = / srv / backup / Migawki / Backup $(Termin +% Y% m-% d% H% M)
snapshot_script = / home / eit / backup / services-snapshots.sh

## początek skrypt

gdyby [ -z "$1" ];następnie
 Echo "Zestaw nie cel"
 wyjście 1
jeszcze
 #Echo "Ustal cel"
 backup_mode = $ 1
fi

## Funkcja dla kodów errpr
check_error(){
 gdyby [ "$1" -dać "100" ]; następnie
 Echo "Początek - nadal działa backup"
 wyjście 1
 fi
 jeśli [ "$1" -równoważnika "10" ]; następnie
 Echo "Początek - backup zrobić - żadnych plików"
 MODE = $ backup_mode $ snapshot_script $ backup_local_path / $ server $ snapshot_local_path / $ server
 jeszcze
 gdyby [ "$1" -równoważnika "0" ]; następnie
 Echo "Początek - backup zrobić - z plikami"
 MODE = $ backup_mode $ snapshot_script $ backup_local_path / $ server $ snapshot_local_path / $ server
 fi
 fi
}

script_start(){
 gdyby [ ! -re "$backup_local_path / $ server" ]; następnie
 Echo "Folder kopii zapasowej nie istnieje"
 Btrfs podwolumen tworzyć $ backup_local_path / $ server
 chmod 740 $backup_local_path / $ server
 Echo "Folder kopii zapasowej utworzony"
 jeszcze
 Echo "Folder kopii zapasowej istnieje"
 fi
}

##
# uruchomić skrypt do backupu
##

server = mysvwe1
script_start
sh $ nazwa_skryptu $ email_admin $ server / path / to / backup / dane $ backup_local_path hasło ssh nazwa_użytkownika
error_now = $?
check_error $ error_now

wyjście 0

backup-script.sh

#!/bin / bash
#
# Thomas Mosandl - 2014-11-14
#
# apt-get install CIFS-utils sendmail-bin
# sendmail config
#
# zdefiniowanie parametru #!/bin / sh
# określić parameterss
## zmienne
## 1. mail
## 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 = 'USA'
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"

# koniec config

Echo "Rozpocznij tworzenie kopii zapasowej - $backup_source_ip"

# vaiable check
gdyby [ -z "$1" ];następnie
        Echo "Email ustawić config"
        backup_email_to ="$backup_email_to_config"
jeszcze
        Echo "poczty ustawiony parametrem"
        backup_email_to = $ 1
fi
# sprawdzić iSCSI Target


#ping -q -c $ backup_check_client_ping $ backup_iscsi_target_1 > /dev / null
#gdyby [ ! $? -równoważnika 0 ]; następnie
#	Echo "ISCSI Ping nie availible"
#	Echo " "  | -s poczty "Utworzyć kopię zapasową - iSCSI - Ping nie działa" -za "Od: $backup_email_from" $backup_email_to
#	wyjście 1
#jeszcze
#	#gdyby [ $(iscsiadm sesja -m | grep -c "$backup_iscsi_target_1") -równoważnika 0 ]; następnie
	#	Echo "ISCSI Góra nie availible"
	#	Echo " "  | -s poczty "Utworzyć kopię zapasową - iSCSI - Góra nie działa" -za "Od: $backup_email_from" $backup_email_to
	#	wyjście 1
	#jeszcze
#		Echo "ISCSI jest w porządku"
	#fi
#fi

#192.168.144.167
# sprawdzić, czy kopia zapasowa jest uruchomiony
ps aux > /tmp / temp.txt
gdyby [ $(kot /tmp/temp.txt  | grep -c "ssh -o StrictHostKeyChecking = brak -l")  -GT 0 ]; następnie
Echo "backup został uszkodzony lub nie działa"
	gdyby [ -fa "$backup_log_path / $ backup_log_file.lck" ]; następnie
rm -rf "$backup_log_path / $ backup_log_file.lck"
	fi
fi
rm -rf /tmp/temp.txt

jeśli [ -fa "$backup_log_path / $ backup_log_file.lck" ]; następnie
Echo " "  | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - Kopia zapasowa jest nadal działa"  -R $ backup_email_from $ backup_email_to
Echo "Scenariusz - kopia zapasowa jest uruchomiony"
		ustawić -e
wyjście 100
jeszcze
Echo "Scenariusz - kopia zapasowa nie jest jeszcze uruchomiony"
	dotknąć "$backup_log_path / $ backup_log_file.lck"
fi

# sprawdzić, czy rejestr jest w logrotate

gdyby [ $(grep -c "$backup_log_path / $ backup_log_file" /etc / logrotate.d / rsyslog)  -równoważnika 1 ]; następnie
Echo "Scenariusz - rsyslog jest ustawiony"
jeszcze
Echo "$backup_log_path / $ backup_log_file {}" >> /etc / logrotate.d / rsyslog
Echo "Scenariusz - rsyslog stworzony"
fi

#
gdyby [ ! $(uchwyt | grep -c "/media / data0 / srv / backup typu Btrfs (RW)")  -równoważnika 0 ]; następnie
Echo "przechowywania nie montowane"
	wyjście 11
	Echo " "  | -s poczty "Utworzyć kopię zapasową - przechowywania nie montowane"  -R $ backup_email_from $ backup_email_to
jeszcze
Echo "przechowywanie jest zamontowany"
fi

# tworzyć foldery

# sprawdzić zapasowej dir
gdyby [ ! -re "$backup_dest_path" ]; następnie
      Echo "Folder kopii zapasowej nie istnieje"
      mkdir -p $ backup_dest_path
      chmod 740 $backup_dest_path
      Echo "Folder kopii zapasowej utworzony"
jeszcze
      Echo "Folder kopii zapasowej istnieje"
fi


jeśli [ ! -re "$backup_log_path" ]; następnie
      Echo "Folder dziennika kopia zapasowa nie istnieje"
      mkdir -p $ backup_log_path
      Echo "Folder dziennika kopia zapasowa utworzona"
jeszcze
      Echo "Folder kopii zapasowej dziennika istnieje"
fi





# check nslookup
nslookup $ backup_source_ip > /dev / null
gdyby [ ! $? -równoważnika 0 ]; następnie
Echo "DNS nie działa dla $ backup_source_ip"
	Echo " "  | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - nslookup nie pracuje dla $ backup_source_ip"  -R $ backup_email_from $ backup_email_to
rm -rf "$backup_log_path / $ backup_log_file.lck"
	ustawić -e
wyjście 1
jeszcze
Echo "DNS jest w porządku"
fi


# check ping
gdyby [ ! $backup_source_ip = "server.de" ]; następnie
ping -q -c $ backup_check_client_ping $ backup_source_ip > /dev / null
gdyby [ ! $? -równoważnika 0 ]; następnie
Echo "Ping nie działa dla $ backup_source_ip"
		Echo " "  | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - ping $ backup_source_ip nie działa"  -R $ backup_email_from $ backup_email_to
rm -rf "$backup_log_path / $ backup_log_file.lck"
		ustawić -e
wyjście 1
	jeszcze
Echo "Ping jest w porządku"
	fi
fi

# rsync
echo $ backup_service
gdyby [ $backup_service = ssh ]; następnie
exit_code ="0"
	log_file_temp = $ backup_log_file_ $(Termin +% Y_% M_% d_% h_% M_% S)
	eksport SSHPASS = $ backup_source_pw
ionice -c 3 rsync -rptgoDvzLKh --delete --rsh ="/usr / bin / sshpass -e ssh -o StrictHostKeyChecking = brak -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
gdyby [ ! $? -dać 0 ]; następnie
Echo "błąd backup - $?"
		kot v $ backup_log_path / $ backup_log_file | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - błąd backup - $?" -za "Od: $backup_email_from" $backup_email_to
ustawić -e
wyjście 1
	jeszcze
Echo "Backup jest w porządku"
		gdyby [ ! $(grep -c "Liczba utworzonych plików: 0" $backup_log_path / $ log_file_temp) -równoważnika 0 ]; następnie
-s poczty "Utworzyć kopię zapasową - $backup_source_ip - Sporządzono zapasowa - żadnych plików" -R $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp
Echo "Scenariusz - żadnych plików"
			 exit_code ="10"
		 jeszcze
kot v $ backup_log_path / $ log_file_temp | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - Sporządzono zapasowa"  -R $ backup_email_from $ backup_email_to
fi
kot $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
rm $ backup_log_path / $ log_file_temp
fi
Elif [ $backup_service = sshnosymlink ]; następnie
exit_code ="0"
	 log_file_temp = $ backup_log_file_ $(Termin +% Y_% M_% d_% h_% M_% S)
	 eksport SSHPASS = $ backup_source_pw
ionice -c 3 rsync -rptgoDvzlKh --delete --rsh ="/usr / bin / sshpass -e ssh -o StrictHostKeyChecking = brak -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
gdyby [ ! $? -dać 0 ]; następnie
Echo "błąd backup - $?"
		 kot v $ backup_log_path / $ backup_log_file | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - błąd backup - $?" -za "Od: $backup_email_from" $backup_email_to
ustawić -e
wyjście 1
	 jeszcze
Echo "Backup jest w porządku"
		 gdyby [ ! $(grep -c "Liczba utworzonych plików: 0" $backup_log_path / $ log_file_temp) -równoważnika 0 ]; następnie
-s poczty "Utworzyć kopię zapasową - $backup_source_ip - Sporządzono zapasowa - żadnych plików" -R $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp
Echo "Scenariusz - żadnych plików"
			 exit_code ="10"
		 jeszcze
kot v $ backup_log_path / $ log_file_temp | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - Sporządzono zapasowa"  -R $ backup_email_from $ backup_email_to
fi
kot $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
rm $ backup_log_path / $ log_file_temp
fi
Elif [ $backup_service = sshsudoftp ]; następnie
exit_code ="0"
	 log_file_temp = $ backup_log_file_ $(Termin +% Y_% M_% d_% h_% M_% S)
	 eksport SSHPASS = $ backup_source_pw
ionice -c 3 rsync -rptgoDzLKh --delete --exclude "*użytkowników / data *" --wykluczać "*Użytkownicy / * / * dane"  --= droga rsync"sudo rsync" --rsh ="/usr / bin / sshpass -e ssh -o StrictHostKeyChecking = brak -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
gdyby [ ! $? -dać 0 ]; następnie
Echo "błąd backup - $?"
		 kot v $ backup_log_path / $ backup_log_file | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - błąd backup - $?" -za "Od: $backup_email_from" $backup_email_to
ustawić -e
wyjście 1
	 jeszcze
Echo "Backup jest w porządku"
		 gdyby [ ! $(grep -c "Liczba utworzonych plików: 0" $backup_log_path / $ log_file_temp) -równoważnika 0 ]; następnie
-s poczty "Utworzyć kopię zapasową - $backup_source_ip - Sporządzono zapasowa - żadnych plików" -R $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp
Echo "Scenariusz - żadnych plików"
			  exit_code ="10"
		  jeszcze
kot v $ backup_log_path / $ log_file_temp | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - Sporządzono zapasowa"  -R $ backup_email_from $ backup_email_to
fi
kot $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
rm $ backup_log_path / $ log_file_temp
fi

Elif [ $backup_service = SMB ]; następnie
        # backup mocowanie
        mount -t CIFS // $ backup_source_ip / $ backup_source_path $ backup_mount_path -o username = $ backup_source_user,password = $ backup_source_pw,ro,s = ntlm

        gdyby [ ! $? -równoważnika 0 ]; następnie
                Echo "Góra nie jest w porządku - $?"
                Echo " "  | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - mount -t CIFS // $ backup_source_ip / $ backup_source_path $ backup_mount_path nie działa" -za "Od: $backup_email_from" $backup_email_to
                rm -rf "$backup_log_path / $ backup_log_file.lck"
                ustawić -e
                wyjście 1
        jeszcze
                Echo "Góra jest w porządku"
        fi


        # rsync
        exit_code ="0"
        log_file_temp = $ backup_log_file_ $(Termin +% 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
        gdyby [ ! $? -dać 0 ]; następnie
                Echo "błąd backup - $?"
                kot v $ backup_log_path / $ backup_log_file | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - błąd backup - $?" -za "Od: $backup_email_from" $backup_email_to
                ustawić -e
                wyjście 1
        jeszcze
                Echo "Backup jest w porządku"
                                                                                                                     199,2-9       92%
        jeszcze
                Echo "Backup jest w porządku"
                gdyby [ ! $(grep -c "Liczba utworzonych plików: 0" $backup_log_path / $ log_file_temp) -równoważnika 0 ]; następnie
                        kot v $ backup_log_path / $ log_file_temp | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - Sporządzono zapasowa - żadnych plików" -za "Od: $backup_email_from" $backup_email_to
                        Echo "Scenariusz - żadnych plików"
                        exit_code ="10"
                jeszcze
                        kot v $ backup_log_path / $ log_file_temp | -s poczty "Utworzyć kopię zapasową - $backup_source_ip - Sporządzono zapasowa" -za "Od: $backup_email_from" $backup_email_to
                fi
                kot $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
                rm $ backup_log_path / $ log_file_temp
        fi
fi

# odmontować

rm -rf "$backup_log_path / $ backup_log_file.lck"
exit $ exit_code

services-snapshots.sh

#!/bin / bash
ustawić -e

gdyby [[ -od $ TRYBIE ]]; następnie
Echo "$TRYB nie podano"
	wyjście 1
fi

jeśli [[ $UID -ne 0 ]]; następnie
Echo "Musi być uruchamiany jako root"
	wyjście 1
fi

jeśli [ -z "$1" ];następnie
Echo "nie ustawiono źródła"
	wyjście 1
jeszcze
Echo "zestaw Źródło"
	BACKUP_SOURCE_DIR = $ 1

fi

gdyby [ -z "$2" ];następnie
Echo "Zestaw nie cel"
	wyjście 1
jeszcze
Echo "Ustal cel"
	BACKUP_BASE_DIR = $ 2
fi

BACKUP_DIR_DAILY = ${BACKUP_BASE_DIR}/codziennie
BACKUP_DIR_WEEKLY = ${BACKUP_BASE_DIR}/co tydzień
BACKUP_DIR_MONTHLY = ${BACKUP_BASE_DIR}/miesięczny
BACKUP_DIR_YEARLY = ${BACKUP_BASE_DIR}/rocznie

gdyby [ ! -re "$BACKUP_DIR_DAILY" ]; następnie
Echo "Folder kopii zapasowej nie istnieje"
	mkdir -p $ BACKUP_DIR_DAILY
chmod 740 $BACKUP_DIR_DAILY
Echo "Folder kopii zapasowej utworzony"
jeszcze
Echo "Folder kopii zapasowej istnieje"
fi
jeśli [ ! -re "$BACKUP_DIR_WEEKLY" ]; następnie
Echo "Folder kopii zapasowej nie istnieje"
	mkdir -p $ BACKUP_DIR_WEEKLY
chmod 740 $BACKUP_DIR_WEEKLY
Echo "Folder kopii zapasowej utworzony"
jeszcze
Echo "Folder kopii zapasowej istnieje"
fi
jeśli [ ! -re "$BACKUP_DIR_MONTHLY" ]; następnie
Echo "Folder kopii zapasowej nie istnieje"
	mkdir -p $ BACKUP_DIR_MONTHLY
chmod 740 $BACKUP_DIR_MONTHLY
Echo "Folder kopii zapasowej utworzony"
jeszcze
Echo "Folder kopii zapasowej istnieje"
fi
jeśli [ ! -re "$BACKUP_DIR_YEARLY" ]; następnie
Echo "Folder kopii zapasowej nie istnieje"
	mkdir -p $ BACKUP_DIR_YEARLY
chmod 740 $BACKUP_DIR_YEARLY
Echo "Folder kopii zapasowej utworzony"
jeszcze
Echo "Folder kopii zapasowej istnieje"
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

gdyby [[ $Tryb = "CODZIENNIE" ]]; następnie
Backup_dir = $ BACKUP_DIR_DAILY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_DAILY
Elif [[ $Tryb = "CO TYDZIEŃ" ]]; następnie
Backup_dir = $ BACKUP_DIR_WEEKLY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_WEEKLY
Elif [[ $Tryb = "MIESIĘCZNY" ]]; następnie
Backup_dir = $ BACKUP_DIR_MONTHLY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_MONTHLY
Elif [[ $Tryb = "ROCZNIE" ]]; następnie
Backup_dir = $ BACKUP_DIR_YEARLY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_YEARLY
jeszcze
Echo "TRYB dostępne są wartości $: CODZIENNIE, MIESIĘCZNY, CO TYDZIEŃ, ROCZNIE"
	wyjście 1
fi

NUM_FILES_TO_KEEP = $(( $NUM_FILES_TO_KEEP + 1 ))

_utworzyć kopię zapasową () {
	/sbin / Btrfs podwolumen migawka -r $ BACKUP_SOURCE_DIR ${backup_dir}/Backup $(Termin +% Y% m-% d)
}

_sprzątać () {
	do pliku w $($ Ls -rt backup_dir | ogon -n  +${NUM_FILES_TO_KEEP} ); zrobić
Btrfs sudo podwolumen usuwać ${backup_dir}/$plik
Gotowe
}

_utworzyć kopię zapasową
_sprzątać

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *