ZFS пул на gpt разделах

Jan 20, 2014 00:52

Стандартный способ создания zfs пула в nas4free - на сырых дисках. Это хороший, полностью рабочий способ. Но есть лучше - на gpt разделах. Этот способ требует применения командной строки. Зачем и как делать пул на gpt разделах мы сегодня и обсудим. Методика есть и в нашем FAQ (прим - nop устройство можно и не создавать, как описано ниже)

Зачем?
В *nix системах используется концепция "всё есть файл". То есть устройства, диски, приводы, разделы - всё выглядит единообразно и подобно файлам. И zfs пул можно построить не только из дисков, но из файлов, дисковых разделов, шифрованных geli устройств и пр. При этом пул, построенный на gpt разделах, имеет некоторые преимущества перед пулом, созданным на сырых дисках.

- устойчивость к перетасовке портов. У FreeBSD (и построенной на его базе nas4free) есть неприятное свойство. Дисковые устройства нумеруются по мере обнаружения. И если к машине подключить новое устройство, то после перезагрузки имена устройств могут сместиться. Да, zfs обладает серьёзной защитой и собирает пул, в котором не только порты перепутаны, но даже диски перенесены на другой тип контроллера. Я сам так не раз делал. Но эта защита не безгранична и для сложных пулов, с кеширующими устройствами, бывают сбои. Миллион к одному, что у вас и потребности в таких сложных пулах никогда не возникнет, не то что проблем с ними - но всё же...

- переносимость. zfs поддерживается на Linux, Illumos - да вообще на многих *nix осях. Проект под Mac OS X активно развивается. Так вот перенести zfs пул на другую ось гораздо проще, если он собран на gpt разделах

и так далее... но, наконец,

- превратить пул на gpt разделах в пул на сырых дисках - дело минут, а вот обратно на тех же дисках - не получится, только через разрушение пула и создание заново.

Как?
UPD от 31 июля 2015. Во FreeBSD 10 трюки с nop больше не нужны. Поэтому их выкинул. Старую инструкцию, годную для 9.х убрал под спойлер /UPD
Пусть нам нужно создать raidz1 из 3 дисков - ada1, ada1 и ada3. Если дисков больше или тип пула другой - делаем по аналогии, всё очень похоже. У вас диски могут называться чуть иначе - что-то вроде da1 или ad2 - используйте свои имена.

Идём в командную строку

Это инструкция для nas4free на FreeBSD 10. Более ранняя для 9.х - см внизу под спойлером.
1) Чистим диски от возможных остатков прошлой разметки
zpool labelclear /dev/ada1
zpool labelclear /dev/ada2
zpool labelclear /dev/ada3

2 Создаём GPT таблицу
gpart create -s GPT /dev/ada1
gpart create -s GPT /dev/ada2
gpart create -s GPT /dev/ada3

3. и выровненный по 4K раздел. Ведь диски у нас с 4K сектором. Метки очень советую давать в соответствии с серийным номером диска. Например, его окончание Понадобится искать где какой диск - пригодится.
gpart add -t freebsd-zfs -l D_Z300W3TK -a 4K /dev/ada1
gpart add -t freebsd-zfs -l D_W300DZ5A -a 4K /dev/ada2
gpart add -t freebsd-zfs -l D_W300E0RC -a 4K /dev/ada3

4.(пусто)

5. Создаём пул. Знак \ позволяет длинную строку разместить на нескольких строках.
zpool create -m /mnt/Pool Pool raidz /dev/gpt/D_Z300W3TK \
/dev/gpt/D_W300DZ5A /dev/gpt/D_W300E0RC

6. Настраиваем умолчания. Отказ от записи времени доступа к файлам сильно убыстряет доступ к каталогам каталогов со множеством файлов. Вид контрольных сумм - и по умолчанию fletcher4, просто для порядка
zfs set atime=off Pool
zfs set checksum=fletcher4 Pool

7. (пусто)

8. (опционально) Можно создать датасеты с флагом, не допускающим создания файлов с кривыми кодировками в именах.
zfs create -o utf8only=on Pool/Series

Прим. Хотя и zfs и FreeBSD допускают вложенные датасеты, у nas4free, похоже, с этим небольшие проблемы. Так что советую обойтись одним уровнем вложения. UPD от 31 июля 2015. Начиная как минимум с 9.3 более не актуально/UPD

9. Все права даём всем (если у вас нет более осмысленной политики разграничения прав доступа)
chmod -R 777 /mnt/Pool

10. Идём в вебгуй, и импортируем вновь созданный пул и диски, настраиваем поведение дисков.

[Устаревший вариант для 9.x]
Устаревший вариант для 9.x. Так можно сделать и на десятке - но много избыточных команд.
1) Чистим диски от возможных остатков прошлой разметки
zpool labelclear /dev/ada1
zpool labelclear /dev/ada2
zpool labelclear /dev/ada3

2 Создаём GPT таблицу
gpart create -s GPT /dev/ada1
gpart create -s GPT /dev/ada2
gpart create -s GPT /dev/ada3

3. и выровненный по 4K раздел. Ведь диски у нас с 4K сектором. Метки очень советую давать в соответствии с серийным номером диска. Например, его окончание Понадобится искать где какой диск - пригодится.
gpart add -t freebsd-zfs -l D_Z300W3TK -a 4K /dev/ada1
gpart add -t freebsd-zfs -l D_W300DZ5A -a 4K /dev/ada2
gpart add -t freebsd-zfs -l D_W300E0RC -a 4K /dev/ada3

4. Создаём поверх раздела устройство с явно указанным 4K сектором. Для raidz, raidz2 или mirror достаточно сделать это только с одним из дисков. Но если вы создаёте страйп, то эту команду строку надо выполнить для каждого из элементов страйпа.
gnop create -S 4096 /dev/gpt/D_Z300W3TK

5. Создаём пул. Знак \ позволяет длинную строку разместить на нескольких строках.
zpool create -m /mnt/Pool Pool raidz /dev/gpt/D_Z300W3TK.nop \
/dev/gpt/D_W300DZ5A /dev/gpt/D_W300E0RC

6. Настраиваем умолчания. Отказ от записи времени доступа к файлам сильно убыстряет доступ к каталогам каталогов со множеством файлов. Вид контрольных сумм - и по умолчанию fletcher4, просто для порядка
zfs set atime=off Pool
zfs set checksum=fletcher4 Pool

7. Экспортируем пул, убиваем лишнюю прокладку в виде gnop устройства, снова его импортируем
zpool export Pool
gnop destroy /dev/gpt/D_Z300W3TK.nop
zpool import -d /dev/gpt Pool

8. (опционально) Можно создать датасеты с флагом, не допускающим создания файлов с кривыми кодировками в именах.
zfs create -o utf8only=on Pool/Series

Прим. Хотя и zfs и FreeBSD допускают вложенные датасеты, у nas4free, похоже, с этим небольшие проблемы. Так что советую обойтись одним уровнем вложения.

9. Все права даём всем (если у вас нет более осмысленной политики разграничения прав доступа)
chmod -R 777 /mnt/Pool

10. Идём в вебгуй, и импортируем вновь созданный пул и диски, настраиваем поведение дисков.

руками, nas, nas4free, zfs

Previous post Next post
Up