ZFS: руководство по быстрому старту во FreeBSD


Айвон Форэс (Ivan Voras)
Перевод: Алексей Федорчук

20 сентября 2007 г

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

Прежде всего, вам потребуются некоторые диски. Предполим, что у вас имеется три запасных диска SCSI: da0, da1, da2.

Добавьте к вашему /etc/rc.conf такую строку, чтобы запускать 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

Не забудьте прочитать man-страницы zfs (8) и zpool (8), а также Sun'овское

Обновлено: 12.03.2015