Thank you for reading this post, don't forget to subscribe!
В рамках данной инструкции мы рассмотрим:
- Создание снапшотов на диске с файловой системой ZFS.
- Написание скрипта для автоматического создания снапшотов.
- Настройку Samba для работы со снапшотами в оконном интерфейсе.
Предполагается, что у нас уже настроен файловый сервер Samba
Настройка ZFS и создание снапшотов
В инструкции не будет подробно рассмотрена работа с файловой системой ZFS — только основные команды, которые нужны для решения нашего вопроса.
Предположим, у нас есть диск /dev/sdb, на котором мы планируем создать ZFS. Вводим команду:
zpool create data /dev/sdb
* в результате будет создан пул data (имя задается произвольно), а диск /dev/sdb отформатирован в файловой системе ZFS. Также последняя будет примонтирована в раздел /data (название зависит от название пула).
Если мы хотим изменить точку монтирования для нашего пула, отмонтируем его:
zfs umount data
Задаем в настройке точку монтирования:
zfs set mountpoint=/mnt/data data
* в данном примере, мы хотим пул data монтировать в раздел /mnt/data.
Снова монтируем пул:
zfs mount data
Он будет примонтирован уже по новому пути.
Файловая система настроена. Идем дальше.
Автоматическое создание снапшотов
Создадим каталог для размещения скрипта:
mkdir /scripts
Создадим скрипт:
vi /scripts/mksnapshot.sh
1 2 3 4 5 6 7 |
#!/bin/bash PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin zpool="data" prefix="GMT-" zfs snapshot $zpool@$prefix`date +%Y.%m.%d_%H.%M.%S` |
* данный небольшой скрипт будет создавать снапшот для пула data. Формат для именования зависит от даты и времени и задается маской <год>.<месяц>.<день>_<час>.<минута>.<секунда>.
Разрешаем запуск скрипта на выполнение:
chmod u+x /scripts/mksnapshot.sh
Пробуем создать снапшот:
/scripts/mksnapshot.sh
Посмотреть список снапшотов можно командой:
zfs list -t snapshot
Теперь внесем изменения в файловой системе, например, создадим или отредактируем файл.
Снова создаем снапшот:
/scripts/mksnapshot.sh
Посмотрев список снапшотов:
zfs list -t snapshot
… мы увидим, что их стало больше.
Разрешим просмотр списка снапшотов:
zpool set listsnapshots=on data
Посмотрим содержимое каталога со снапшотами:
ls -l /data/.zfs/snapshot/
Обратите внимание, что каталог .zfs команда ls не отображает, даже, с опцией -a. Но если прописать путь с каталогом .zfs, система вернет список папок с предыдущими версиями файлов.
Мы должны увидеть два каталога с созданными нами снапшотами. Если походить по ним, то мы увидим файлы и изменениями. Таким образом можно убедиться, что наша настройка работает.
Теперь откроем на редактирование крон, чтобы настроить автоматический запуск скрипта:
crontab -e
1 |
0 13,19 * * * /scripts/mksnapshot.sh |
* в данной настройке мы будет запускать создание снапшота дважды в день — в 13:00 и в 19:00.
По части файловой системы работы завершены. Переходим к Samba.
Настройка Samba
Открываем конфигурационный файл, чтобы настроить нашу шару:
vi /etc/samba/smb.conf
Предполагается, что наш файловый сервер уже настроен и в нем есть общая папка Архив. Чтобы у нас была возможность просматривать ее снапшоты, добавляем:
1 2 3 4 5 6 7 8 |
[Архив] ... vfs objects = shadow_copy2 shadow:basedir = /data shadow:snapdir = .zfs/snapshot shadow:format = GMT-%Y.%m.%d_%H.%M.%S shadow:sort = desc shadow:localtime = yes |
* где:
- vfs objects — дополнения, которые используются Samba в операциях ввода вывода VFS. Если мы используем несколько подсистем, то перечисляем их через запятую.
- shadow:basedir — корневой каталог, относительно которого выполняется поиск снапшотов.
- shadow:snapdir — каталог, в котором находятся снапшоты. Мы его задаем относительно shadow:basedir. Итого, в нашем примере будет /data/.zfs/snapshot.
- shadow:format — формат созданного снапшота. Тут важно, чтобы он совпадал с форматом создания (который мы задали в скрипте).
- shadow:sort — в каком порядке сортируем список. В нашем примере сверху будут наиболее свежие.
- shadow:localtime — определяет используются ли имена моментальных снимков в формате UTC/GMT или по местному времени.
Перезапускаем самбу, чтобы применить настройки:
systemctl restart smbd
Настройка завершена. Проверим.
Просмотр предыдущих версий в свойствах папки
Откроем шару, например, с компьютера Windows. Кликнем правой кнопкой мыши внутри нашей папки (Архив) и выберем Свойства. Перейдем на вкладку Предыдущие версии — мы должны увидеть, примерно, такую картину:
Как видим, у нас есть три снапшота.
Автоматическая чистка
Также приведем пример скрипта для автоматической чистки снапшотов:
vi /scripts/clean_snaphots.sh
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin count_to_live=30 count_snapshots=$(zfs list -t snapshot | wc -l) if [ $count_snapshots -gt $count_to_live ] then count_to_delete=$(($count_snapshots - $count_to_live)) zfs list -t snapshot -o name -S creation | tail -n +$count_to_delete | xargs -n 1 zfs destroy -r fi |
* в данном примере мы намерены хранить последние 30 снапшотов (переменная count_to_live).