Превращаем zfs пул на номерах разделов в пул на GPT метках

Jul 30, 2015 00:17

Намедни мы создавали zfs пул в nas4free 10 через вебгуй. Удалось сделать это без .nop трюков и по номеру GPT раздела. Сегодня с использованием командной строки мы превратим его в пул на GPT метках.

Напомним, что до настоящего времени zfs пулы в nas4free создавались на .nop устройствах поверх сырых дисков. В 10-ке (тестировал на крайней 10.1.0.2 - Prescience (revision 1731)) nop устройства создавать не надо, тк пулы по умолчанию создаются с ashift=12, как рекомендовано для дисков с 4K сектором. Кроме того, появилась возможность создания пулов через вебгуй не только на сырых дисках, но и на номерах GPT разделов. (Для буквоедов - на слайсах, конечно, но мне лень влезать в терминологические дебри). А с использованием небольшого бубна в любой момент пул на номерах GPT разделов (типа /dev/ada2p1) можно превратить в пул на GPT метках (типа gpt/D_Z300V84, где в качестве цифири удобно использовать серийный номер диска). Вот этот бубен и рассмотрим.

1) Вот так выглядит пул, созданный на GPT через вебгуй. Если добавить новых дисков, есть риск, что ada2 уедет, скажем, на ada4. В большинстве случаев zfs справляется с такой проблемой, но бывают и накладки. Особенно в комбинации с вебгуем.
nas4free: ~# zpool status TestPool
pool: TestPool
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
TestPool ONLINE 0 0 0
ada2p1 ONLINE 0 0 0

errors: No known data errors

nas4free: ~# zfs list TestPool
NAME USED AVAIL REFER MOUNTPOINT
TestPool 300K 9.63G 96K /mnt/TestPool

nas4free: ~# zdb TestPool |grep ashift
ashift: 12
ashift: 12

Мы заменим номер раздела на GPT метку раздела. В качестве метки возьмём серийный номер диска. Он у меня VB763b8b793c8d656d

NB Посмотреть серийный номер диска ada1 можно на его этикетке. А можно командой
diskinfo -v /dev/ada1 | grep ident

2) Смотрим на разделы нашего диска
nas4free: ~# gpart show ada2
=> 34 20971453 ada2 GPT (10G)
34 8158 - free - (4.0M)
8192 20955136 1 freebsd-zfs (10G)
20963328 8159 - free - (4.0M)

Видим, что раздел GPT, один, за номером 1, выровнен по 4М и в хвосте тоже оставлено по 4 мегабайта места на всякий случай. Это хорошо.

3) Дадим нашему разделу метку

nas4free: ~# gpart modify -i 1 -l VB763b8b793c8d656d /dev/ada2
ada2p1 modified

4) Эскпортируем пул и вновь импортируем, но уже на GPT метках
nas4free: ~# zpool export TestPool
nas4free: ~# zpool import -d /dev/gpt -f -a

5) Смотрим, что вышло
nas4free: ~# zpool status TestPool
pool: TestPool
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
TestPool ONLINE 0 0 0
gpt/VB763b8b793c8d656d ONLINE 0 0 0

errors: No known data errors

Замечательно - пул теперь на метках. Как ни тасуй номера дисков - метки сохранятся. Если вылетит какой-то диск - сразу видно, какой у него серийный номер. А если дисков много - это дело.

6) Сообщим о достигнутом вебгую

Идём в
Disks|ZFS|Configuration|Synchronize

Нажав соседние вкладки, можно видеть, что Current (записано в конфиге) - /dev/ada2p1, а Detected (считано с пула) - gpt/VB763b8b793c8d656d

Синхронизируем конфиг с реальностью, нажав кнопку Synchronize. Для надёжности я перегрузил машину и убедился, что всё OK.

PS На всякий случай те же операции для простого raidz на 3 диска под спойлером
[Код...]nas4free: ~# zpool status PoolZ
pool: PoolZ
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
PoolZ ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ada3p1 ONLINE 0 0 0
ada4p1 ONLINE 0 0 0
ada5p1 ONLINE 0 0 0

errors: No known data errors
nas4free: ~# gpart modify -i 1 -l 12cb6cc5 /dev/ada3
ada3p1 modified
nas4free: ~# gpart modify -i 1 -l 7dcbf1d8 /dev/ada4
ada4p1 modified
nas4free: ~# gpart modify -i 1 -l 69954af8 /dev/ada5
ada5p1 modified
nas4free: ~# zpool export PoolZ
nas4free: ~# zpool import -d /dev/gpt -f -a
nas4free: ~# zpool status PoolZ
pool: PoolZ
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
PoolZ ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
gpt/12cb6cc5 ONLINE 0 0 0
gpt/7dcbf1d8 ONLINE 0 0 0
gpt/69954af8 ONLINE 0 0 0

errors: No known data errors

nas, nas4free, zfs

Previous post Next post
Up