Снапшоты на ZFS и Samba

Обновлено и опубликовано Опубликовано:

В рамках данной инструкции мы рассмотрим:

  • Создание снапшотов на диске с файловой системой ZFS.
  • Написание скрипта для автоматического создания снапшотов.
  • Настройку Samba для работы со снапшотами в оконном интерфейсе.

Предполагается, что у нас уже настроен файловый сервер Samba. В противном случае можно воспользоваться инструкциями Установка и настройка файлового сервера Samba на Ubuntu или Установка и настройка файлового сервера Samba на CentOS 8.

Приступим.

Настройка 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

#!/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

0 13,19 * * * /scripts/mksnapshot.sh

* в данной настройке мы будет запускать создание снапшота дважды в день — в 13:00 и в 19:00.

По части файловой системы работы завершены. Переходим к Samba.

Настройка Samba

Открываем конфигурационный файл, чтобы настроить нашу шару:

vi /etc/samba/smb.conf

Предполагается, что наш файловый сервер уже настроен и в нем есть общая папка Архив. Чтобы у нас была возможность просматривать ее снапшоты, добавляем:

[Архив]
    ...
    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

#!/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).

# Linux # Серверы # Резервное копирование
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет