ZFS. Клонирование раздела ZFS (используя снэпшоты) на другой физический диск ZFS (локально или по сети): различия между версиями
Cless (обсуждение | вклад) |
Cless (обсуждение | вклад) |
||
| Строка 67: | Строка 67: | ||
''-F - перезаписать файловую систему stripe2/dataset2, иначе будет ошибка что пул и датасет stripe2/dataset2 существуют'' | ''-F - перезаписать файловую систему stripe2/dataset2, иначе будет ошибка что пул и датасет stripe2/dataset2 существуют'' | ||
-Pev - отображать прогресс | -Pev - ''отображать прогресс'' | ||
zfs send -Pev -R stripe1/dataset1@3 | zfs recv -F stripe2/dataset2 | zfs send -Pev -R stripe1/dataset1@3 | zfs recv -F stripe2/dataset2 | ||
Версия 12:43, 29 января 2023
Клонирование
Форматируем диски в ZFS с GPT-LABEL
gpart create -s gpt ada1
gpart create -s gpt ada2
gpart add -t freebsd-zfs -l stripe1 ada1
gpart add -t freebsd-zfs -l stripe2 ada2
При ошибке "gpart: geom 'ada0': File exists" делаем:
gpart delete -i 1 ada0
gpart destroy ada0
Создаем пулы и датасеты на них с видимыми снэпшотами в файловой системе (директория со снэпшотами: ".zfs" в корне датасета)
zpool create -m /mnt/stripe1 stripe1 /dev/gpt/stripe1
zpool create -m /mnt/stripe2 stripe2 /dev/gpt/stripe2
zfs create -o snapdir=visible stripe1/dataset1
zfs create -o snapdir=visible stripe2/dataset2
Изменяем файл test.txt на датасете первого диска (stripe1/dataset1) и каждый раз после изменения делаем снэпы (с именами 1,2,3) датасета "stripe1/dataset1"
echo "1" > /mnt/stripe1/dataset1/test.txt
zfs snapshot stripe1/dataset1@1
echo "2" > /mnt/stripe1/dataset1/test.txt
zfs snapshot stripe1/dataset1@2
echo "3" > /mnt/stripe1/dataset1/test.txt
zfs snapshot stripe1/dataset1@3
Проверяем наличие снэпов
zfs list -r -t snapshot -o name,creation stripe1/dataset1
...
NAME CREATION
stripe1/dataset1@1 Thu Jan 30 0:27 2020
stripe1/dataset1@2 Thu Jan 30 0:27 2020
stripe1/dataset1@3 Thu Jan 30 0:27 2020
...
ls -lh /mnt/stripe1/dataset1/.zfs/snapshot/
...
total 2
drwxr-xr-x 2 root wheel 3B Jan 30 00:26 1
drwxr-xr-x 2 root wheel 3B Jan 30 00:26 2
drwxr-xr-x 2 root wheel 3B Jan 30 00:26 3
...
Клонируем датасет первого диска "stripe1/dataset1" рекурсивно со снэпшотами (начиная с последнего снэпшота "3") на пустой датасет второго диска "stripe2/dataset2"
-R - клонировать все снэпшоты рекурсивно от самого нового до самого старого
-F - перезаписать файловую систему stripe2/dataset2, иначе будет ошибка что пул и датасет stripe2/dataset2 существуют
-Pev - отображать прогресс
zfs send -Pev -R stripe1/dataset1@3 | zfs recv -F stripe2/dataset2
Проверка
Проверяем что на новом датасете второго диска ("stripe2/dataset2") файл "test.txt" и снэпы датасета клонированы корректно
zfs list -r -t snapshot -o name,creation stripe2/dataset2
...
NAME CREATION
stripe2/dataset2@1 Thu Jan 30 0:27 2020
stripe2/dataset2@2 Thu Jan 30 0:27 2020
stripe2/dataset2@3 Thu Jan 30 0:27 2020
...
ls -lh /mnt/stripe2/dataset2/test.txt
...
-rw-r--r-- 1 root wheel 2B Jan 30 00:27 /mnt/stripe2/dataset2/test.txt
...
ls -lh /mnt/stripe2/dataset2/.zfs/snapshot/
...
total 2
drwxr-xr-x 2 root wheel 3B Jan 30 00:26 1
drwxr-xr-x 2 root wheel 3B Jan 30 00:26 2
drwxr-xr-x 2 root wheel 3B Jan 30 00:26 3
...
Для проверки можно откатиться на самый старый снэпшот "1" и убедиться что содержимое test.txt также откатилось
Проверяем содержимое файла до откатывания
cat /mnt/stripe2/dataset2/test.txt
...
3
...
Откатываемся на снэпшот "1"
zfs rollback -r stripe2/dataset2@1
Проверяем содержимое файла после откатывания
cat /mnt/stripe2/dataset2/test.txt
...
1
...