Пример скрипта для создания резервной копии файлового сервера

Thank you for reading this post, don't forget to subscribe!

Дан­ный скрипт напи­сан на bash под управ­ле­ни­ем опе­ра­ци­он­ной систе­мы семей­ства Linux. Он будет рабо­тать по сле­ду­ю­ще­му сценарию:

  • Еже­днев­ная акту­а­ли­за­ция дан­ных в ката­ло­ге резерв­ный копий daily.
  • Еже­не­дель­ная акту­а­ли­за­ция дан­ных в ката­ло­ге резерв­ный копий weekly.
  • Созда­ние пол­но­го архи­ва с дан­ны­ми раз в 30 дней.
  • Ста­рые архи­вы (кото­рым более 370 дней) будут удаляться.

При­сту­пим.

Пример скрипта

Скрипт будет срав­ни­вать фай­лы в рабо­чем ката­ло­ге и пап­ке резерв­но­го копи­ро­ва­ния с помо­щью rsync. Это поз­во­лит нам сэко­но­мить на вре­ме­ни выпол­не­ния зада­ния. Дол­го будет выпол­нять­ся толь­ко зада­ние созда­ния архи­ва с помо­щью tar.

Созда­ем ката­лог для скрип­тов и сам скрипт:

mkdir /scripts

vi /scripts/samba_backup.sh

Зада­ем пра­ва скрип­ту на выполнение:

chmod +x /scripts/samba_backup.sh

Скрипт готов к работе.

Описание скрипта

Опи­шем зна­чи­мые стро­ки наше­го скрипта:

1 Ука­зы­ва­ем на путь к интерпретатору.
2 Зада­ем систем­ные пере­мен­ные, что­бы не при­шлось в скрип­те про­пи­сы­вать пол­ные пути до испол­ня­е­мых файлов.
4 - 6 Зада­ем переменные.
4 Ката­лог и рабо­чи­ми дан­ны­ми, кото­рые нуж­но резервировать.
5 Кор­не­вая пап­ка, где нуж­но хра­нить резерв­ные копии.
6 Дата, когда запус­ка­ет­ся скрипт. Исполь­зу­ет­ся для
9 Поиск и уда­ле­ние всех архи­вов, кото­рым более 370 дней.
11 - 18 Син­хро­ни­за­ция дан­ных с помо­щью rsync
12 Выпол­не­ние син­хро­ни­за­ции дан­ных в ката­лог daily.
15 Зада­ем усло­вие. Номер дня неде­ли дол­жен рав­нять­ся 0 (вос­кре­се­нье). Если это так, то будет выпол­не­на стро­ка 17.
17 Выпол­не­ние син­хро­ни­за­ции дан­ных в ката­лог weekly.
20 - 26 Созда­ние архива.
21 Полу­чим коли­че­ство фай­лов с архи­ва­ми, кото­рым мень­ше 30 дней и сохра­ним резуль­тат в пере­мен­ную count_last_archives.
22 Про­ве­ря­ем усло­вие, рав­на ли пере­мен­ная count_last_archives нулю. На прак­ти­ке это зна­чит, что за послед­ние 30 дней у нас нет ни одно­го архи­ва. Если это так, то выпол­ня­ем стро­ки 24 - 25.
24 Пере­хо­дим внутрь ката­ло­га с рабо­чи­ми дан­ны­ми. Это нуж­но для того, что­бы наш архив созда­вал­ся отно­си­тель­но не кор­ня, а рабо­че­го ката­ло­га. Так удоб­нее при вос­ста­нов­ле­нии данных.
25 С помо­щью ути­ли­ты tar мы архи­ви­ру­ем все дан­ные и созда­ем архив в ката­ло­ге archive. В назва­ние архи­ва добав­ля­ем дату его создания.

Подготовка системы

Созда­ем ката­ло­ги, в кото­рых будут хра­нить­ся резерв­ные копии:

mkdir -p /backup/{daily,weekly,archive}

В нашем при­ме­ре, это три ката­ло­га, отно­си­тель­но, пап­ки /backup:

  1. daily — еже­днев­ные копии. Для быст­ро­го восстановления.
  2. weekly — еже­не­дель­ные. На слу­чай, если еже­днев­ный бэкап успел сте­реть важ­ные данные.
  3. archive — архи­вы на край­ний случай.

Наша систе­ма гото­ва к созда­нию резерв­ных копий.

Сохранение данных на удаленном компьютере

Резерв­ные копии необ­хо­ди­мо созда­вать на уда­лен­ном ком­пью­те­ре или внеш­нем дис­ке, что­бы они были доступ­ны при выхо­де из строя сер­ве­ра. Пред­по­ло­жим, у нас исполь­зу­ет­ся общая пап­ка на уда­лен­ном сер­ве­ре, в кото­рой будут раз­ме­щать­ся фай­лы с backup.

Что­бы упро­стить про­цесс мон­ти­ро­ва­ния сете­вой пап­ки, откро­ем на редак­ти­ро­ва­ние сле­ду­ю­щий файл:

vi /etc/fstab

и доба­вим в него строчку:

* в дан­ном при­ме­ре выпол­ня­ет­ся мон­ти­ро­ва­ние общей пап­ки backup на сер­ве­ре с IP-адре­сом 192.168.0.1 в ката­лог /mnt. В каче­стве сете­вой фай­ло­вой систе­мы исполь­зу­ет­ся cifs (про­то­кол SMB: сер­вер samba или общая пап­ка Windows). Пара­мет­ры для под­клю­че­ния — user: поз­во­ля­ет выпол­нить мон­ти­ро­ва­ние любо­му поль­зо­ва­те­лю, rw: с пра­вом на чте­ние и запись, noauto: не мон­ти­ро­вать авто­ма­ти­че­ски при стар­те систе­мы, credentials: файл, в кото­ром напи­са­ны логин и пароль для под­клю­че­ния к общей папке.

Теперь созда­дим файл с логи­ном и паролем:

vi /root/.smbclient

и при­ве­дем его к сле­ду­ю­ще­му виду:

username=backup
password=backup

* где username: имя поль­зо­ва­те­ля, password: пароль. Само собой, в вашем слу­чае ука­зы­ва­ют­ся свои данные.

Теперь вве­ди­те сле­ду­ю­щую команду:

mount /mnt

Долж­на при­мон­ти­ро­вать сете­вая пап­ка //192.168.0.1/backup. Это мож­но про­ве­рить сле­ду­ю­щей командой:

mount

Автоматический запуск по расписанию

Созда­дим пра­ви­ло в cron для авто­ма­ти­че­ско­го запус­ка наше­го скрип­та. Выпол­ня­ем команду:

crontab -e

И добав­ля­ем строку:

0 3 * * * /scripts/samba_backup.sh

* в дан­ном при­ме­ре мы будем запус­кать резер­ви­ро­ва­ние каж­дый день в 3 часа ночи.