Не так давно столкнулся с необходимостью автоматического бекапа директории, а вернее Dataset (DTS) на файловом сервере на базе NAS4Free. Наличие снапшотов – отличное решение для ситуаций, когда необходимо оперативно восстановить данные. Да и по большому счету, снапшот – отличный инструмент для надежной работы с информацией на хранилищах. Ниже представлен простой скрипт на bash, который используется ОС FreeBSD и отрабатывает по расписанию (в 00:00 по МСК ежедневно), при этом происходит автоматическое удаление снапшотов, старших 31 дня:
#!/bin/sh
date=`date +20%g-%m-%e` # date gggg-mm-dd
olddate=`date -v-31d +20%g-%m-%e` # create date -31 day
backup_DTS1=’pool_name/DTS_name1′
backup_DTS2=’pool_name/DTS_name2′
zfs snapshot $backup_DTS1@$date
zfs destroy $backup_DTS1@$olddate
zfs snapshot $backup_DTS2@$date
zfs destroy $backup_DTS2@$olddate
После этого добавляем данный файл в расписание – crontab -e из консоли сервера. Также добавить задание в планировщик (Cron) можно через веб-интерфейс NAS4Free:
Откатиться на нужную версию снапшота можно командой:
zfs rollback _название_снапшота_
Отличный вариант для восстановления отдельного файла: монтируем снапшот в указанную директорию (папку) и вытаскиваем нужные данные в штатном режиме (без отката всего DTS):
zfs clone -o mountpoint=/путь-к-папке-монтирования название-снепшота место-хранения-в-сторажде
Готово. Скрипт и его отработка по расписанию для создания автоматических снапшотов указанных DTS выполнены.