скрипт резервного копирования Shell — для Windows SMB / Linux Server

подготовить

  • скопировать все файлы в одну папку
  • изменить backup-start.sh с пути и конфиги
  • сделать Btrfs раздел
  • создать подтоме для резервного копирования пути
  • создать cronjob

Начало

backup-start.sh ежедневно
backup-start.sh еженедельно

режимы резервного копирования

  • СМБ
  • sshs
  • sshnosymlink
  • sshsudoftp

backup-start.sh

#!/бен / Баш
# проверить сценарий резервного копирования, если его ход и, если да, то известково для снимка
script_name = / дома / резервное копирование / backup-script.sh
email_admin=mail1@mail.de,mail2@mail.de
BACKUP_PATH = / SRV / резервное копирование / сделано
snapshot_path = / SRV / резервное копирование / снимки / Подпорка $(дата +% Y-% m-% d-% H-% М)
snapshot_script = / дом / еи / резервное копирование / services-snapshots.sh

## сценарий запуска

если [ -от "$1" ];тогда
 эхо "нет целевого набора"
 Выход 1
еще
 #echo "Установить объект"
 backup_mode = $ 1
фи

## Функция для кодов errpr
check_error(){
 если [ "$1" -дать "100" ]; тогда
 эхо "Начало - Резервное копирование по-прежнему работает"
 Выход 1
 фи
 если [ "$1" -уравнение "10" ]; тогда
 эхо "Начало - Резервное копирование сделано - файлов нет"
 MODE = $ backup_mode $ snapshot_script $ backup_local_path / $ сервер $ snapshot_local_path / $ сервер
 еще
 если [ "$1" -уравнение "0" ]; тогда
 эхо "Начало - Резервное копирование сделано - с файлами"
 MODE = $ backup_mode $ snapshot_script $ backup_local_path / $ сервер $ snapshot_local_path / $ сервер
 фи
 фи
}

script_start(){
 если [ ! -d "$backup_local_path / $ сервер" ]; тогда
 эхо "папка резервного копирования не существует"
 Btrfs подтоме создать $ backup_local_path / $ сервер
 CHMOD 740 $backup_local_path / $ сервер
 эхо "папка резервного копирования создается"
 еще
 эхо "папка резервного копирования существует"
 быть
}

##
# запустить скрипт резервного копирования
##

Сервер = mysvwe1
script_start
ш $ script_name $ email_admin $ сервер / путь / к / резервного копирования / данных $ backup_local_path SSH имя пользователя пароль
error_now = $?
check_error $ error_now

Выход 0

backup-script.sh

#!/бен / Баш
#
# Томас Mosandl - 2014-11-14
#
# APT-получить установку CIFS-Utils Sendmail-бен
# Sendmail конфигурации
#
# определить параметр #!/бен / ш
# определить parameterss
## переменные
## 1. почта
## 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 = / вар / журнал
backup_check_client_ping ="1"
backup_service = $ 5
backup_dest_path = $ 4 / $ backup_source_ip
backup_log_path = / вар / журнал
backup_log_file = копию_ $ backup_source_ip
backup_email_to_config ="thomas.mosandl@mosandl.eu"
backup_email_from ="backup@mosandl.eu"

# конец конфигурации

эхо "Начать резервное копирование - $backup_source_ip"

# vaiable проверка
если [ -от "$1" ];тогда
        эхо "почты установлены в конфиге"
        backup_email_to ="$backup_email_to_config"
еще
        эхо "почты установлено значение параметра"
        backup_email_to = $ 1
фи
# проверить ISCSI цель


#ping -q -c $ backup_check_client_ping $ backup_iscsi_target_1 > /DEV / нуль
#если [ ! $? -уравнение 0 ]; тогда
#	эхо "ISCSI Ping не воевавших"
#	эхо " "  | почта -s "Резервное копирование - ISCSI - Ping не работает" -a "Из: $backup_email_from" $backup_email_to
#	Выход 1
#еще
#	#если [ $(iscsiadm -m сессия | Grep -c "$backup_iscsi_target_1") -уравнение 0 ]; тогда
	#	эхо "ISCSI гора не воевавшие"
	#	эхо " "  | почта -s "Резервное копирование - ISCSI - Гора не работает" -a "Из: $backup_email_from" $backup_email_to
	#	Выход 1
	#еще
#		эхо "ISCSI все в порядке"
	#фи
#fi

#192.168.144.167
# проверить, если резервное копирование выполняется
пс Окс > /TMP / temp.txt
если [ $(кот /tmp/temp.txt  | Grep -c "SSH -o StrictHostKeyChecking = нет -l")  -GT 0 ]; тогда
эхо "резервная копия была нарушена или не работает"
	если [ -е "$backup_log_path / $ backup_log_file.lck" ]; тогда
гт -rf "$backup_log_path / $ backup_log_file.lck"
	фи
фи
гт -rf /tmp/temp.txt

если [ -е "$backup_log_path / $ backup_log_file.lck" ]; тогда
эхо " "  | почта -s "Резервное копирование - $backup_source_ip - Резервное копирование по-прежнему работает"  -г $ backup_email_from $ backup_email_to
эхо "скрипт - резервное копирование выполняется"
		набор -e
Выход 100
еще
эхо "скрипт - резервное копирование не все еще работает"
	потрогать "$backup_log_path / $ backup_log_file.lck"
быть

# проверьте журнал в LogRotate

если [ $(Grep -c "$backup_log_path / $ backup_log_file" /и т.д. / logrotate.d / Rsyslog)  -уравнение 1 ]; тогда
эхо "скрипт - Rsyslog устанавливается"
еще
эхо "$backup_log_path / $ backup_log_file {}" >> /и т.д. / logrotate.d / Rsyslog
эхо "скрипт - Rsyslog создано"
быть

#
если [ ! $(крепление | Grep -c "/СМИ / data0 Btrfs типа / SRV / резервное копирование (RW)")  -уравнение 0 ]; тогда
эхо "хранения не установлен"
	Выход 11
	эхо " "  | почта -s "Резервное копирование - хранения не установлен"  -г $ backup_email_from $ backup_email_to
еще
эхо "хранения установлены"
быть

# создавать папки

# проверить резервный реж
если [ ! -d "$backup_dest_path" ]; тогда
      эхо "папка резервного копирования не существует"
      MkDir -p $ backup_dest_path
      CHMOD 740 $backup_dest_path
      эхо "папка резервного копирования создается"
еще
      эхо "папка резервного копирования существует"
фи


если [ ! -d "$backup_log_path" ]; тогда
      эхо "Папка резервного копирования журнала не существует"
      MkDir -p $ backup_log_path
      эхо "Папка резервного копирования журнала создается"
еще
      эхо "Папка резервного копирования журнала существует"
быть





# проверка Nslookup
Nslookup $ backup_source_ip > /DEV / нуль
если [ ! $? -уравнение 0 ]; тогда
эхо "DNS не работает для $ backup_source_ip"
	эхо " "  | почта -s "Резервное копирование - $backup_source_ip - Nslookup не работает на $ backup_source_ip"  -г $ backup_email_from $ backup_email_to
гт -rf "$backup_log_path / $ backup_log_file.lck"
	набор -e
Выход 1
еще
эхо "DNS в порядке"
быть


# проверка пинг
если [ ! $backup_source_ip = "server.de" ]; тогда
пинг -q -c $ backup_check_client_ping $ backup_source_ip > /DEV / нуль
если [ ! $? -уравнение 0 ]; тогда
эхо "PING не работает на $ backup_source_ip"
		эхо " "  | почта -s "Резервное копирование - $backup_source_ip - пинг $ backup_source_ip не работает"  -г $ backup_email_from $ backup_email_to
гт -rf "$backup_log_path / $ backup_log_file.lck"
		набор -e
Выход 1
	еще
эхо "Пинг в порядке"
	фи
фи

# Rsync
Эхо $ backup_service
если [ $backup_service = SSH ]; тогда
exit_code ="0"
	log_file_temp = $ backup_log_file_ $(дата +% Y_% м_% D_% Н_% М_% S)
	экспорт SSHPASS = $ backup_source_pw
ionice -c 3 Rsync -rptgoDvzLKh --delete --rsh ="/USR / бен / sshpass -e -o SSH StrictHostKeyChecking = нет -l $ backup_source_user " $backup_source_ip:$backup_source_path $ backup_dest_path --log-файл = $ backup_log_path / $ log_file_temp --stats >> $backup_log_path / $ log_file_temp
если [ ! $? -дать 0 ]; тогда
эхо "Резервное копирование ошибка - $?"
		кошка -v $ backup_log_path / $ backup_log_file | почта -s "Резервное копирование - $backup_source_ip - Резервное копирование Ошибка - $?" -a "Из: $backup_email_from" $backup_email_to
набор -e
Выход 1
	еще
эхо "Резервное копирование в порядке"
		если [ ! $(Grep -c "Количество созданных файлов: 0" $backup_log_path / $ log_file_temp) -уравнение 0 ]; тогда
почта -s "Резервное копирование - $backup_source_ip - Готов резервное копирование - файлов нет" -г $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp
эхо "скрипт - файлов нет"
			 exit_code ="10"
		 еще
кошка -v $ backup_log_path / $ log_file_temp | почта -s "Резервное копирование - $backup_source_ip - Готов резервное копирование"  -г $ backup_email_from $ backup_email_to
фи
кошка $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
гт $ backup_log_path / $ log_file_temp
фи
Элиф [ $backup_service = sshnosymlink ]; тогда
exit_code ="0"
	 log_file_temp = $ backup_log_file_ $(дата +% Y_% м_% D_% Н_% М_% S)
	 экспорт SSHPASS = $ backup_source_pw
ionice -c 3 Rsync -rptgoDvzlKh --delete --rsh ="/USR / бен / sshpass -e -o SSH StrictHostKeyChecking = нет -l $ backup_source_user " $backup_source_ip:$backup_source_path $ backup_dest_path --log-файл = $ backup_log_path / $ log_file_temp --stats >> $backup_log_path / $ log_file_temp
если [ ! $? -дать 0 ]; тогда
эхо "Резервное копирование ошибка - $?"
		 кошка -v $ backup_log_path / $ backup_log_file | почта -s "Резервное копирование - $backup_source_ip - Резервное копирование Ошибка - $?" -a "Из: $backup_email_from" $backup_email_to
набор -e
Выход 1
	 еще
эхо "Резервное копирование в порядке"
		 если [ ! $(Grep -c "Количество созданных файлов: 0" $backup_log_path / $ log_file_temp) -уравнение 0 ]; тогда
почта -s "Резервное копирование - $backup_source_ip - Готов резервное копирование - файлов нет" -г $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp
эхо "скрипт - файлов нет"
			 exit_code ="10"
		 еще
кошка -v $ backup_log_path / $ log_file_temp | почта -s "Резервное копирование - $backup_source_ip - Готов резервное копирование"  -г $ backup_email_from $ backup_email_to
фи
кошка $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
гт $ backup_log_path / $ log_file_temp
фи
Элиф [ $backup_service = sshsudoftp ]; тогда
exit_code ="0"
	 log_file_temp = $ backup_log_file_ $(дата +% Y_% м_% D_% Н_% М_% S)
	 экспорт SSHPASS = $ backup_source_pw
ionice -c 3 Rsync -rptgoDzLKh --delete --exclude "*пользователей / данные *" --исключать "*пользователей / * / * данные"  --Rsync-путь ="Судо Rsync" --РШ ="/USR / бен / sshpass -e -o SSH StrictHostKeyChecking = нет -l $ backup_source_user " $backup_source_ip:$backup_source_path $ backup_dest_path --log-файл = $ backup_log_path / $ log_file_temp --stats >> $backup_log_path / $ log_file_temp
если [ ! $? -дать 0 ]; тогда
эхо "Резервное копирование ошибка - $?"
		 кошка -v $ backup_log_path / $ backup_log_file | почта -s "Резервное копирование - $backup_source_ip - Резервное копирование Ошибка - $?" -a "Из: $backup_email_from" $backup_email_to
набор -e
Выход 1
	 еще
эхо "Резервное копирование в порядке"
		 если [ ! $(Grep -c "Количество созданных файлов: 0" $backup_log_path / $ log_file_temp) -уравнение 0 ]; тогда
почта -s "Резервное копирование - $backup_source_ip - Готов резервное копирование - файлов нет" -г $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp
эхо "скрипт - файлов нет"
			  exit_code ="10"
		  еще
кошка -v $ backup_log_path / $ log_file_temp | почта -s "Резервное копирование - $backup_source_ip - Готов резервное копирование"  -г $ backup_email_from $ backup_email_to
фи
кошка $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
гт $ backup_log_path / $ log_file_temp
фи

Элиф [ $backup_service = СМБ ]; тогда
        # резервное крепление
        Крепление -t CIFS // $ backup_source_ip / $ backup_source_path $ backup_mount_path -o имя пользователя = $ backup_source_user,пароль = $ backup_source_pw,ро,сек = NTLM

        если [ ! $? -уравнение 0 ]; тогда
                эхо "Гора не в порядке - $?"
                эхо " "  | почта -s "Резервное копирование - $backup_source_ip - монтаж -t CIFS // $ backup_source_ip / $ backup_source_path $ backup_mount_path не работают" -a "Из: $backup_email_from" $backup_email_to
                гт -rf "$backup_log_path / $ backup_log_file.lck"
                набор -e
                Выход 1
        еще
                эхо "Mount порядке"
        быть


        # Rsync
        exit_code ="0"
        log_file_temp = $ backup_log_file_ $(дата +% Y_% м_% D_% Н_% М_% S)
        Rsync -rlptDvz $ backup_mount_path $ backup_dest_path --log-файл = $ backup_log_path / $ log_file_temp --stats --chmod = и = RWX,г = гх,о = Rx >> $backup_log_path / $ log_file_temp
        если [ ! $? -дать 0 ]; тогда
                эхо "Резервное копирование ошибка - $?"
                кошка -v $ backup_log_path / $ backup_log_file | почта -s "Резервное копирование - $backup_source_ip - Резервное копирование Ошибка - $?" -a "Из: $backup_email_from" $backup_email_to
                набор -e
                Выход 1
        еще
                эхо "Резервное копирование в порядке"
                                                                                                                     199,2-9       92%
        еще
                эхо "Резервное копирование в порядке"
                если [ ! $(Grep -c "Количество созданных файлов: 0" $backup_log_path / $ log_file_temp) -уравнение 0 ]; тогда
                        кошка -v $ backup_log_path / $ log_file_temp | почта -s "Резервное копирование - $backup_source_ip - Готов резервное копирование - файлов нет" -a "Из: $backup_email_from" $backup_email_to
                        эхо "скрипт - файлов нет"
                        exit_code ="10"
                еще
                        кошка -v $ backup_log_path / $ log_file_temp | почта -s "Резервное копирование - $backup_source_ip - Готов резервное копирование" -a "Из: $backup_email_from" $backup_email_to
                фи
                кошка $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
                гт $ backup_log_path / $ log_file_temp
        фи
фи

# размонтировать

гт -rf "$backup_log_path / $ backup_log_file.lck"
выход $ exit_code

services-snapshots.sh

#!/бен / Баш
набор -e

если [[ -от $ РЕЖИМА ]]; тогда
эхо "$Режим не указан"
	Выход 1
фи

если [[ $UID -ne 0 ]]; тогда
эхо "Должен быть запущен как корень"
	Выход 1
фи

если [ -от "$1" ];тогда
эхо "не установлены источники"
	Выход 1
еще
эхо "Set Source"
	BACKUP_SOURCE_DIR = $ 1

фи

если [ -от "$2" ];тогда
эхо "нет целевого набора"
	Выход 1
еще
эхо "Установить объект"
	BACKUP_BASE_DIR = $ 2
фи

BACKUP_DIR_DAILY = ${BACKUP_BASE_DIR}/ежедневно
BACKUP_DIR_WEEKLY = ${BACKUP_BASE_DIR}/еженедельно
BACKUP_DIR_MONTHLY = ${BACKUP_BASE_DIR}/ежемесячно
BACKUP_DIR_YEARLY = ${BACKUP_BASE_DIR}/раз в год

если [ ! -d "$BACKUP_DIR_DAILY" ]; тогда
эхо "папка резервного копирования не существует"
	MkDir -p $ BACKUP_DIR_DAILY
CHMOD 740 $BACKUP_DIR_DAILY
эхо "папка резервного копирования создается"
еще
эхо "папка резервного копирования существует"
фи
если [ ! -d "$BACKUP_DIR_WEEKLY" ]; тогда
эхо "папка резервного копирования не существует"
	MkDir -p $ BACKUP_DIR_WEEKLY
CHMOD 740 $BACKUP_DIR_WEEKLY
эхо "папка резервного копирования создается"
еще
эхо "папка резервного копирования существует"
фи
если [ ! -d "$BACKUP_DIR_MONTHLY" ]; тогда
эхо "папка резервного копирования не существует"
	MkDir -p $ BACKUP_DIR_MONTHLY
CHMOD 740 $BACKUP_DIR_MONTHLY
эхо "папка резервного копирования создается"
еще
эхо "папка резервного копирования существует"
фи
если [ ! -d "$BACKUP_DIR_YEARLY" ]; тогда
эхо "папка резервного копирования не существует"
	MkDir -p $ BACKUP_DIR_YEARLY
CHMOD 740 $BACKUP_DIR_YEARLY
эхо "папка резервного копирования создается"
еще
эхо "папка резервного копирования существует"
фи




NUM_FILES_TO_KEEP_DAILY = 10
NUM_FILES_TO_KEEP_WEEKLY = 20
NUM_FILES_TO_KEEP_MONTHLY = 12
NUM_FILES_TO_KEEP_YEARLY = 10

если [[ $MODE = "ЕЖЕДНЕВНО" ]]; тогда
BACKUP_DIR = $ BACKUP_DIR_DAILY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_DAILY
Элиф [[ $MODE = "ЕЖЕНЕДЕЛЬНИК" ]]; тогда
BACKUP_DIR = $ BACKUP_DIR_WEEKLY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_WEEKLY
Элиф [[ $MODE = "ЕЖЕМЕСЯЧНО" ]]; тогда
BACKUP_DIR = $ BACKUP_DIR_MONTHLY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_MONTHLY
Элиф [[ $MODE = "ЕЖЕГОДНО" ]]; тогда
BACKUP_DIR = $ BACKUP_DIR_YEARLY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_YEARLY
еще
эхо "значения доступны $ РЕЖИМА являются: ЕЖЕДНЕВНО, ЕЖЕМЕСЯЧНО, ЕЖЕНЕДЕЛЬНИК, ЕЖЕГОДНО"
	Выход 1
фи

NUM_FILES_TO_KEEP = $(( $NUM_FILES_TO_KEEP + 1 ))

_резервное копирование () {
	/SBIN / Btrfs подтом снимок -r $ BACKUP_SOURCE_DIR ${BACKUP_DIR}/Подпорки $(дата +% Y-% m-% d)
}

_cleanup () {
	для файла $($ -RT BACKUP_DIR левая шкала | хвост -n  +${NUM_FILES_TO_KEEP} ); делать
Судо Btrfs подтоме удалить ${BACKUP_DIR}/$файл
сделанный
}

_резервное копирование
_cleanup

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *