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

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

* дан­ный неболь­шой скрипт будет созда­вать снап­шот для пула 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

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

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

Настройка Samba

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

vi /etc/samba/smb.conf

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

* где:

  • 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

* в дан­ном при­ме­ре мы наме­ре­ны хра­нить послед­ние 30 снап­шо­тов (пере­мен­ная count_to_live).