ZFS. Клонирование раздела ZFS (используя снэпшоты) на другой физический диск ZFS (локально или по сети): различия между версиями

Материал из Wiki
Перейти к навигации Перейти к поиску
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
=== Клонирование ===
= Клонирование =


==== Форматируем диски в ZFS с GPT-LABEL ====
=== Форматируем диски в ZFS с GPT-LABEL ===
gpart create -s gpt ada1
<code>gpart create -s gpt ada1</code>


gpart create -s gpt ada2
<code>gpart create -s gpt ada2</code>


gpart add -t freebsd-zfs -l stripe1 ada1
<code>gpart add -t freebsd-zfs -l stripe1 ada1</code>
 
<code>gpart add -t freebsd-zfs -l stripe2 ada2</code>


gpart add -t freebsd-zfs -l stripe2 ada2
При ошибке "gpart: geom 'ada0': File exists" делаем:
При ошибке "gpart: geom 'ada0': File exists" делаем:
gpart delete -i 1 ada0


gpart destroy ada0
<code>gpart delete -i 1 ada0</code>
 
<code>gpart destroy ada0</code>


==== Создаем пулы и датасеты на них с видимыми снэпшотами в файловой системе (директория со снэпшотами: ".zfs" в корне датасета) ====
=== Создаем пулы и датасеты на них с видимыми снэпшотами в файловой системе (директория со снэпшотами: ".zfs" в корне датасета) ===
zpool create -m /mnt/stripe1 stripe1 /dev/gpt/stripe1
<code>zpool create -m /mnt/stripe1 stripe1 /dev/gpt/stripe1</code>


zpool create -m /mnt/stripe2 stripe2 /dev/gpt/stripe2
<code>zpool create -m /mnt/stripe2 stripe2 /dev/gpt/stripe2</code>


zfs create -o snapdir=visible stripe1/dataset1
<code>zfs create -o snapdir=visible stripe1/dataset1</code>


zfs create -o snapdir=visible stripe2/dataset2
<code>zfs create -o snapdir=visible stripe2/dataset2</code>


==== Изменяем файл test.txt на датасете первого диска (stripe1/dataset1) и каждый раз после изменения делаем снэпы (с именами 1,2,3) датасета "stripe1/dataset1" ====
=== Изменяем файл test.txt на датасете первого диска (stripe1/dataset1) и каждый раз после изменения делаем снэпы (с именами 1,2,3) датасета "stripe1/dataset1" ===
echo "1" > /mnt/stripe1/dataset1/test.txt
<code>echo "1" > /mnt/stripe1/dataset1/test.txt</code>


zfs snapshot stripe1/dataset1@1
<code>zfs snapshot stripe1/dataset1@1</code>


echo "2" > /mnt/stripe1/dataset1/test.txt
<code>echo "2" > /mnt/stripe1/dataset1/test.txt</code>


zfs snapshot stripe1/dataset1@2
<code>zfs snapshot stripe1/dataset1@2</code>


echo "3" > /mnt/stripe1/dataset1/test.txt
<code>echo "3" > /mnt/stripe1/dataset1/test.txt</code>


zfs snapshot stripe1/dataset1@3
<code>zfs snapshot stripe1/dataset1@3</code>


==== Проверяем наличие снэпов ====
=== Проверяем наличие снэпов ===
zfs list -r -t snapshot -o name,creation stripe1/dataset1
<code>zfs list -r -t snapshot -o name,creation stripe1/dataset1</code><blockquote>...
<blockquote>...


NAME                CREATION
NAME                CREATION
Строка 48: Строка 49:
stripe1/dataset1@3  Thu Jan 30  0:27 2020
stripe1/dataset1@3  Thu Jan 30  0:27 2020


...</blockquote>
...</blockquote><code>ls -lh /mnt/stripe1/dataset1/.zfs/snapshot/</code><blockquote>...
ls -lh /mnt/stripe1/dataset1/.zfs/snapshot/
<blockquote>...


total 2
total 2
Строка 62: Строка 61:
...</blockquote>
...</blockquote>


==== Клонируем датасет первого диска "stripe1/dataset1" рекурсивно со снэпшотами (начиная с последнего снэпшота "3") на пустой датасет второго диска "stripe2/dataset2" ====
=== Клонируем датасет первого диска "stripe1/dataset1" рекурсивно со снэпшотами (начиная с последнего снэпшота "3") на пустой датасет второго диска "stripe2/dataset2" ===
-R ''- клонировать все снэпшоты рекурсивно от самого нового до самого старого''
'''''-R''''' ''- клонировать все снэпшоты рекурсивно от самого нового до самого старого''


-F ''- перезаписать файловую систему stripe2/dataset2, иначе будет ошибка что пул и датасет stripe2/dataset2 существуют''
'''''-F''''' ''- перезаписать файловую систему stripe2/dataset2, иначе будет ошибка что пул и датасет stripe2/dataset2 существуют''


-Pev ''- отображать прогресс''
'''''-Pev''''' ''- отображать прогресс''
zfs send -Pev -R stripe1/dataset1@3 | zfs recv -F stripe2/dataset2


=== Проверка ===
==== На локальный диск ====
<code>zfs send -Pev -R stripe1/dataset1@3 | zfs recv -F stripe2/dataset2</code>


==== Проверяем что на новом датасете второго диска ("stripe2/dataset2") файл "test.txt" и снэпы датасета клонированы корректно ====
==== На другой сервер по сети используя SSH ====
zfs list -r -t snapshot -o name,creation stripe2/dataset2
<code>zfs send -Pev -R stripe2/dataset2@3 | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.199.185 zfs recv -F stripe2/dataset2</code>
<blockquote>...
 
= Проверка =
 
=== Проверяем что на новом датасете второго диска ("stripe2/dataset2") файл "test.txt" и снэпы датасета клонированы корректно ===
<code>zfs list -r -t snapshot -o name,creation stripe2/dataset2</code><blockquote>...


NAME                CREATION
NAME                CREATION
Строка 84: Строка 87:
stripe2/dataset2@3  Thu Jan 30  0:27 2020
stripe2/dataset2@3  Thu Jan 30  0:27 2020


...</blockquote>
...</blockquote><code>ls -lh /mnt/stripe2/dataset2/test.txt</code><blockquote>...
ls -lh /mnt/stripe2/dataset2/test.txt
<blockquote>...


-rw-r--r--  1 root  wheel     2B Jan 30 00:27 /mnt/stripe2/dataset2/test.txt
-rw-r--r--  1 root  wheel     2B Jan 30 00:27 /mnt/stripe2/dataset2/test.txt


...</blockquote>
...</blockquote><code>ls -lh /mnt/stripe2/dataset2/.zfs/snapshot/</code><blockquote>...
ls -lh /mnt/stripe2/dataset2/.zfs/snapshot/
<blockquote>...


total 2
total 2
Строка 104: Строка 103:
...</blockquote>Для проверки можно откатиться на самый старый снэпшот "1" и убедиться что содержимое test.txt также откатилось
...</blockquote>Для проверки можно откатиться на самый старый снэпшот "1" и убедиться что содержимое test.txt также откатилось


==== Проверяем содержимое файла до откатывания ====
=== Проверяем содержимое файла до откатывания ===
cat /mnt/stripe2/dataset2/test.txt
<code>cat /mnt/stripe2/dataset2/test.txt</code><blockquote>...
<blockquote>...


3
3
Строка 112: Строка 110:
...</blockquote>
...</blockquote>


==== Откатываемся на снэпшот "1" ====
=== Откатываемся на снэпшот "1" ===
zfs rollback -r stripe2/dataset2@1
<code>zfs rollback -r stripe2/dataset2@1</code>


==== Проверяем содержимое файла после откатывания ====
=== Проверяем содержимое файла после откатывания ===
cat /mnt/stripe2/dataset2/test.txt
<code>cat /mnt/stripe2/dataset2/test.txt</code><blockquote>...
<blockquote>...


1
1
Строка 125: Строка 122:
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__
[[Категория:XigmaNAS (NAS4free)]]
[[Категория:XigmaNAS (NAS4free)]]
[[Категория:FreeBSD]]

Текущая версия на 12:14, 27 июня 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

На другой сервер по сети используя SSH

zfs send -Pev -R stripe2/dataset2@3 | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.199.185 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

...