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