Мини сервер для бекапов часть 2 (настройка)
Продолжение. Начало в http://pikabu.ru/story/mini_server_dlya_bekapov_chast_1_podgotovitelnaya_3854168
Итак, сервер стоит, сетевой ресурс подключен, все пользователи созданы, права настроены. Но сам по себе он ничего еще не бекапит.
Теперь стоит немного рассказать о логике работы механизма резервного копирования. Изначально все файлы, лежащие на сетевом ресурсе сравниваются с "зеркалом" лежащим на локальном диске сервера с помощью утилиты rsync. Если есть отличие в размере файла или во времени последнего изменения, то копируется более новая версия. Далее во всей красе выступает файловая система ext4 или XFS с ее механизмом жестких ссылок. Об этом чуть позже.
Чтобы обеспечить работу rsync по расписанию, создадим небольшой скрипт.
sudo nano /home/backuper/sync.sh
Данная команда покажет вам окно текстового редактора. Содержимое необходимо сделать таким:
#!/bin/bash
rsync --archive --delete --progress /mnt/nw /backup/now
cp -rval /backup/now /backup/$(date +%Y-%m-%d)/
rm -rdf /backup/$(date --date='30 days ago' +'%Y-%m-%d')
Вот такой вот простенький скрипт. Что же он делает? В первую очередь он синхронизирует сетевую папку /mnt/nw с локальной /backup/now. При этом, сохраняет все атрибуты файлов, в первую очередь, дату изменения. Если файл на сетевом ресурсе был удален, то он удаляется и в локальной папке.
Затем содержимое папки /backup/now копируется жесткими ссылками в папку /backup/"текущая дата" При этом, количество свободного места на диске практически не уменьшается, именно за счет использования жестких ссылок. Файлы, удаленные сегодня, в предыдущих копиях остаются, пока не будет удалена последняя ссылка на них. Файлы, измененные сегодня удаляются в текущей копии и копируются заново, таким образом, предыдущие версии файлов остаются в сохранности все время жизни архивных копий.
Последняя строка удаляет папку с названием, содержащим текущую дату - 30 дней. То есть, мы имеем 30 ежедневных копий, к каждой из которых можно откатиться. При этом, места занимается сравнительно мало, так как все эти папки содержат лишь массив жестких ссылок на файлы. Файл в архивной копии удаляется только тогда, когда удаляется последняя ссылка на него. Ессно, что архивации и сжатия никакого не используется, что в случае ЧП дает нам очень оперативный доступ ко всем данным.
Осталось дело за малым, настроить работу этого скрипта по расписанию. Для этого, в линуксе есть очень хороший инструмент cron.
Вызовем консоль пользователя backuper
sudo -u backuper -sH
И начнем настраивать наш cron
crontab -e
При первом запуске, система спросит, какой редактор использовать. Лично я предпочитаю nano.
В конфигурационном файле пропишем следущее:
SHELL=/bin/bash
MAILTO=backuper
HOME=/home/backuper
0 23 * * * /home/backuper/sync.sh
Последнюю строку в конфигурации необходимо оставить пустой.
Вот и все. Ежедневно в 23:00 будет запускаться наш скрипт, сравнивать сетевой ресурс с локальной папкой, копировать при необходимости измененные и добавленные файлы и удалять архивные копии старше 30 дней. При этом, никаких сетевых ресурсов на нашем сервере извне не видно, никакие трояны и шаловливые руки не имеют доступа к архивным данным. А восстановление производится на сервере, путем копирования необходимых данных из нужной локальной папки в подключенную сетевую шару.
Вот пример того, что хранится в моей папке с бекапами. Одна копия весит примерно 100 ГБ, все вместе занимает чуть более 120. И это без какого-либо сжатия.
Здравствуйте, а можно как-то сделать простой скрипт для принудительного бекапа? Например человек после завершения работы запустил скрипт и сделал бекап своей работы? Бывает задерживаемся и не хочется все потерять.....
А уведомление на почту используешь?
А можно поподробнее описать суть работы скрипта? Меня интересует что происходит по происшествию 30 дней? Как выполняется консолидация файлов по прошествии 30 дней? Я правильно понимаю, если файл отсутствовал в начальной копии он кладется в папку с текущей датой, а на следующий день что? Он снова копируется?
интересна логика работы системы, если криптор зашифрует шару на ПК пользователя, которая подключена как сетевой диск. Потом, в 23 часа NAS спокойненько забякает бекап из зашифрованных файлов, я полагаю?