ZFS Basics

Создание ZFS - вольюма на FreeBSD

Диски с TLER (типа желтых WD или Segate Constellation) в ZFS работают со сбоями!!! В версиях FreeBSD до 8.2 включаем поддржку ZFS:

echo 'zfs_enable="YES"' >> /etc/rc.conf

Одно время я считал, что лучше в ЗФС загонять диск целиком, предварительно удалив все разделы.
Удалить раздел p1:

gpart delete -i 1 /dev/mfid0
gpart destroy /dev/mfid0

и после этого загнать диск в ZFS:

zpool create pool-name mfid0

Однако, это не обязательно. Как показала практика, лучше на каждом диске создавать свой swap - раздел, а остальное - в другой раздел, который уже загонять в zpool. Или же создавать единственную партицию, а ее уже загонять в пул. Практика развития ZFS идет по этому пути.

gpart create -s GPT /dev/da0
gpart add -t freebsd-zfs /dev/da0
gpart create -s GPT da1
gpart add -t freebsd-zfs da1
----
gpart create -s GPT daN
gpart add -t freebsd-zfs daN
zpool create my-pool raidz da0p1 da1p1 daNp1

Желательно использовать не BSD-имена разделов, включаемых в пул, а uuid этих разделов - в случае переноса пула на другую операционную систему (Linux, Solaris, etc), адресация по uuid сохранится.

Узнать uuid раздела (партиции) можно командой

zpool list | grep -a7 | grep rawuuid

Тогда создание пула надо производить командой

zpol create [-m mount_point] pool_name [pool_type] gptid/part-001-uuid gptid/part-002-uuid gptid/part-003-uuid
  • pool_name - это и имя пула и, если отдельно не задана точка монтирования, точка монтирования по отношению к первому уровню корневого каталога.
  • -m mount_point - точка монтирования, опциональный параметр. Если нас не устраивает монтирование пула на первом уровне корневого каталога в папке с именем пула;
  • pool_type - это тип пула. Опциональный параметр, может принимать значения stripe raidz raidz2 raidz3. Если не указывать, будет один или несколько одиночных дисков, слитых в один по типу jbod.

Здесь - грубые приближения, на самом деле есть варианты, как с точкой монтирования, так и с типом пула (пул может быть комбинированным, сочетая, например, raidz2 и одинокий диск).

Надо иметь в виду только следующее:

  • В ZFS изменить уровеь raidz невозможно;
  • В ZFS добавить в raidz диск невозможно;
  • В пул можно воткнуть диск, но новый диск не впишется в структуру raidz и не получит подстраховки на случай выхода из строя (если не задана схема избыточности и не даны дополнительные диски)

RAIDZ и FreeNAS-9/FreeBSD

If we want to create raidz volume on freenas from disks of different sizes, we need to:

  • create any pool (or some of pools) with desired zraid name for one of them (for example, ZFS) of any type (for example, RAID0), containing all available drives using Volume manager (this will create default mount point for this pool, swap partitions on every disk, gpt partition map on every drive, and gpt partitions for use in raidz);
  • destroy this pool via command line using command
    zpool destroy ZFS

    the partitions /dev/gptid/69217d70-7632-11e3-b2c9-001517e60f0a and other in folder /dev/gptid will be automatically saved.

  • Create raidz (or raidz2) using the following command:

    zpool create -f -m /mnt/ZFS ZFS raidz gptid/69217d70-7632-11e3-b2c9-001517e60f0a gptid/699bb0cc-7632-11e3-b2c9-001517e60f0a gptid/6a00ba6a-7632-11e3-b2c9-001517e60f0a

    where:

    • -f - force flag, which is needed in case of our drives has different size;
    • -m /mnt/ZFS - is the mount point, which had been created on step 1;
    • ZFS - pool name;
    • raidz (or raidz2) - redundancy scheme for zpool;
    • gptid/UUID - gpt uuids for partitions created on step 1

Guide

Advanced ZFS tricks

Взято тут: http://citkit.ru/articles/464/

Это, конечно, здорово, что поддержка ZFS ныне включена дерево исходников, но что теперь с ней делать? Ниже вы найдете некоторые инструкции, как быстро подключить и запустить ее.

Прежде всего, вам потребуются некоторые диски. Предполим, что у вас имеется три запасных диска SCSI: da0, da1, da2.
Добавьте к вашему /etc/rc.conf строку, zfs_enable=“YES” чтобы запускать ZFS автоматически при начальной загрузке:

echo 'zfs_enable="YES"' >> /etc/rc.conf

Теперь установите один пул, использующий RAIDZ:

zpool create tank raidz da0 da1 da2

Это должно автоматически смонтировать вам /tank/.
Хорошо, теперь мы хотим поместить каталог /usr/ на ZFS и использовать ее изящество в размещении файловых систем. Я знаю, что у вас, вероятно, там уже имеются некоторые файлы, так что мы будем работать с каталогом /tank/usr и только когда все будет готово, мы изменим его точку монтирования на /usr.

zfs create tank/usr 

Создаем (внутри /usr) файловую систему ports/ и разрешите gzip-компрессию на ней, поскольку в ней имеются только текстовые файлы. С другой стороны, мы не хотим компрессировать содержимое ports/distfiles/, потому что большинство файлов в этом каталоге уже сжато (поэтому выделяем его в отдельную файловую систему):

zfs create tank/usr/ports 
zfs set compression=gzip tank/usr/ports
zfs create tank/usr/ports/distfiles
zfs set compression=off tank/usr/ports/distfiles 

Вы действительно видите, как ваша жизнь изменяется, не так ли ? :-).
Давайте создаим файловую систему для домашних каталогов пользователей и мою собственную файловую систему - home/pjd/. Я помню, что мы используем RAIDZ, но в свой каталог я помещаю чрезвычайно важный материал. Поэтому я устанавливаю, что каждый ее блок должен быть сохранен в трех копиях:

zfs create tank/usr/home 
zfs create tank/usr/home/pjd
zfs create tank/usr/home/pjd/important
zfs set copies=3 tank/usr/home/pjd/important

Я хотел бы иметь каталог с музыкой и тому подобным контентом, который можно было бы сделать доступным по сети чере NFS. Я не очень вознуюсь за сохранность этого контента, и мой компьютер не очень быстр, так что я только выключу вычисление контрольной суммы. Это - только пример такой возможности! Пожалуйста, измерьте быстродействие перед тем, как это делать, потому что возможно, что в вашем случае это ничего не даст (и ненужно):

zfs create tank/music 
zfs set checksum=off tank/music
zfs set sharenfs=on tank/music

О, я совсем забыл. Кому нынче нужно обновление времени доступа к файлам?
zfs set atime=off tank
Да, мы устанавливаем это для всей файловой системы tank, и этот атрибут будет автоматически унаследован вложенными в нее файловыми системами.
Было бы также хорошо получать информацию, все ли в порядке с нашим пулом:

echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf 

Возможно, по некоторым причинам вы все еще нуждаетесь в файловой системе UFS, например если вы используете ACLs или расширенные атрибуты файлов, которые пока не поддерживаются файловой системой ZFS. Если так, почему не только используют ZFS, чтобы обеспечить память? Вот способ, которым можно получить снапшоты UFS, клоны UFS, и т.д., просто используя ZVOLs.

zfs create -V 10g tank/ufs 
newfs /dev/zvol/tank/ufs
mount /dev/zvol/tank/ufs /ufs
zfs snapshot tank/ufs@20070406
mount -r /dev/zvol/tank/ufs@20070406 /ufs20070406
zfs clone tank/ufs@20070406 tank/ufsok
fsck_ffs -p /dev/zvol/tank/ufsok
mount /dev/zvol/tank/ufsok /ufsok

Хотите применить шифрование swap-раздела и, тем не менее, использовать ZFS? Нет ничего проще, однако:

ПРЕДУПРЕЖДЕНИЕ: То, как реализована ZFS в настоящее время (точно так же, как в Solaris), она не может работать при небольших объемах памяти. То есть в настоящее время вы действительно нуждаетесь в пространстве подкачки. См. http://lists.freebsd.org/pipermail/freebsd-current/2007-September/076831.html для получения более подробных сведений.

zfs create -V 4g tank/swap 
geli onetime -s 4096 /dev/zvol/tank/swap
swapon /dev/zvol/tank/swap.eli

Пытаетесь сделать кое-что рискованное с вашим домашним каталогом? Сначала сделайте его снапшот!
zfs snapshot tank/home/pjd@justincase
Оказывается, что это было скорее ненужно, чем опасно? Возвращаемся обратно к снапшоту!

zfs rollback tank/home/pjd@justincase 
zfs destroy tank/home/pjd@justincase 

Отлично, все работает, так что мы можем смонтировать tank/usr как наш реальный каталог /usr:

zfs set mountpoint=/usr tank/usr 
volumes/zfs/basiks_tricks.txt · Last modified: 2015/02/27 23:26 by rybario
About this template
CC Attribution-Share Alike 4.0 International
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5