среда, 9 сентября 2009 г.

Резервирование и восстановление ZFS II

В предыдущей статье я описал процедуру создания резервной копии из снапшотов и скрипт, позволяющий создавать архивированные бэкапы ZFS. Во второй статье мы рассмотрим в деталях процедуру ручного восстановления из сделанного нами архивированного бэкапа файловой системы (датасета).

Сделать бэкап - это лишь половина дела, нужно, как минимум, убедиться, что мы сможем восстановиться с него.

Итак, воспроизведем все с самого начала на нашем многострадальном server5.

Опустим шаги по подготовке тестовой среды, покажем лишь их финал:

server5# mkdir /test

server5# zfs list
NAME USED AVAIL REFER MOUNTPOINT
data 131K 19.6G 20K /data
rpool 14.6G 12.7G 93K /rpool
rpool/ROOT 6.59G 12.7G 18K legacy
rpool/ROOT/zfsroot 6.59G 12.7G 6.49G /
rpool/ROOT/zfsroot/var 100M 12.7G 100M /var
rpool/dump 4.00G 12.7G 4.00G -
rpool/export 117K 12.7G 20K /export
rpool/export/home 97K 12.7G 97K /export/home
rpool/swap 4G 16.6G 130M -

server5# zfs create data/work
server5# cd /data/work
server5# ls
server5# mkfile 100m file.test

server5# zfs list
NAME USED AVAIL REFER MOUNTPOINT
data 100M 19.5G 20K /data
data/work 100M 19.5G 100M /data/work
rpool 14.6G 12.7G 93K /rpool
rpool/ROOT 6.59G 12.7G 18K legacy
rpool/ROOT/zfsroot 6.59G 12.7G 6.49G /
rpool/ROOT/zfsroot/var 100M 12.7G 100M /var
rpool/dump 4.00G 12.7G 4.00G -
rpool/export 117K 12.7G 20K /export
rpool/export/home 97K 12.7G 97K /export/home
rpool/swap 4G 16.6G 130M -

server5# ls -al /data/work
total 7
drwxr-xr-x 2 root root 3 Sep 9 17:26 .
drwxr-xr-x 3 root root 4 Sep 9 17:38 ..
-rw------T 1 root root 104857600 Sep 9 17:26 file2.test

Выполним резервное копирование датасета data/work при помощи скрипта, описанного в предыдущей статье:

server5# zfs_backup.sh data/work /test
Checking OS... SunOS 5.10
Checking super-user... root
*** BEGIN: ZFS backup for data/work at Wednesday, September 9, 2009 5:27:19 PM ALMT.
Archive will be compressed with gzip -9.
WARNING: Snapshot data/work@snapshot does not exists.
*** DONE: ZFS backup for data/work at Wednesday, September 9, 2009 5:27:23 PM ALMT.

Готово. Уничтожим файловую систему, которую мы зарезервировали:

server5# zfs destroy data/work
server5# zfs list
NAME USED AVAIL REFER MOUNTPOINT
data 132K 19.6G 20K /data
rpool 14.6G 12.7G 93K /rpool
rpool/ROOT 6.59G 12.7G 18K legacy
rpool/ROOT/zfsroot 6.59G 12.7G 6.49G /
rpool/ROOT/zfsroot/var 100M 12.7G 100M /var
rpool/dump 4.00G 12.7G 4.00G -
rpool/export 117K 12.7G 20K /export
rpool/export/home 97K 12.7G 97K /export/home
rpool/swap 4G 16.6G 130M -


Вперед. Начнем восстановление.

Создаем временную файловую систему и принимаем в нее снапшот:

server5# zfs create data/rcvd
server5# zfs set canmount=noauto data/rcvd
server5# zfs set compression=on data/rcvd
server5# gzcat server5.data%work.0.zfs.gz | zfs receive -vdF data/rcvd
receiving full stream of data/work@snapshot into data/rcvd/work@snapshot
received 100MB stream in 2 seconds (50.1MB/sec)

server5# zfs list
NAME USED AVAIL REFER MOUNTPOINT
data 100M 19.5G 21K /data
data/rcvd 36K 19.5G 18K /data/rcvd
data/rcvd/work 18K 19.5G 18K /data/rcvd/work
data/rcvd/work@snapshot 0 - 18K -
data/work 100M 19.5G 100M /data/work
rpool 14.6G 12.7G 93K /rpool
rpool/ROOT 6.59G 12.7G 18K legacy
rpool/ROOT/zfsroot 6.59G 12.7G 6.49G /
rpool/ROOT/zfsroot/var 100M 12.7G 100M /var
rpool/dump 4.00G 12.7G 4.00G -
rpool/export 117K 12.7G 20K /export
rpool/export/home 97K 12.7G 97K /export/home
rpool/swap 4G 16.6G 130M -

Теперь приступаем к волшебству:

server5# zfs clone data/rcvd/work@snapshot data/rcvd_clone
server5# zfs promote data/rcvd_clone
server5# zfs set canmount=noauto data/rcvd_clone
server5# zfs set canmount=noauto data/rcvd_clone
server5# zfs set mountpoint=/data/work data/rcvd_clone
property may be set but unable to remount filesystem
server5# zfs rename data/work data/work.old
server5# zfs rename data/rcvd_clone data/work
server5# zfs mount data/work
server5# zfs destroy data/work.old
server5#

Осталось кое-что зачистить после восстановления:

server5# zfs destroy -r data/rcvd
server5# zfs destroy -r data/work@snapshot

server5# zfs list
NAME USED AVAIL REFER MOUNTPOINT
data 100M 19.5G 21K /data
data/work 100M 19.5G 100M /data/work
rpool 14.6G 12.7G 93K /rpool
rpool/ROOT 6.59G 12.7G 18K legacy
rpool/ROOT/zfsroot 6.59G 12.7G 6.49G /
rpool/ROOT/zfsroot/var 100M 12.7G 100M /var
rpool/dump 4.00G 12.7G 4.00G -
rpool/export 117K 12.7G 20K /export
rpool/export/home 97K 12.7G 97K /export/home
rpool/swap 4G 16.6G 130M -

И - "Реконструкция завершена" (С) "Пятый Элемент":

server5# ls -al /data/work
total 7
drwxr-xr-x 2 root root 3 Sep 9 17:56 .
drwxr-xr-x 3 root root 3 Sep 9 17:59 ..
-rw------T 1 root root 104857600 Sep 9 17:56 file1.test

Как очевидно, процедура, в общем, несложная - но достаточно объемистая, рутинная и желательно ее упростить еще больше. В одной из следующих статей мы напишем скрипт zfs_restore.sh для выполнения вышерассмотренных шагов по восстановлению файловых систем из нашиэ бэкапов в одно действие.