Вот мы наконец и добрались до практического применения ZFS on Linux. Повторяю, что рассмотрено оно будет на примере openSUSE. Однако всё сказанное ниже имеет силу для любого дистрибутива, к которому можно прикрутить ZFS on Linux. Надеюсь, из скаазанного понятно, почему слово «прикрутить» тут адекватно отражает суть дела? Ведь мы буквально прикрутили поддержку ZFS с ядру Linux’а, как бы ни сопротивлялись этому лицензии.

Ну так вот, применение ZFS начинается с создания пула. Что делается командой zpool и в моём случае выглядит так:

# zpool create tank sdb

где create — субкоманда очевидного назначения, tank — традиционное имя пула (на самом деле оно может быть любым), а sdb — имя составляющего пул устройства; если таковых несколько, то они должны быть перечислены в этой строке все, через пробел.

По поводу имени — несколько комментариев. Во-первых, вопреки рекомендациям, я использовал имя «верхнего уровня» вместо более однозначного по модели by-id, потому что пул как раз и создаётся в целях тестирования (точнее, экспериментирования). И потом, никакого переключения устройств до конца жизни пула я не планирую.

Во-вторых, в качестве аргумента команды я задал имя raw-устройства: это рекомендуется для того, чтобы система ZFS могла автоматически разметить диск, обеспечив правильное выравнивание.

В-третьих, в ZFS on Linux FAQ можно обнаружить рекомендацию задать явным образом размер сектора, используя опцию -o ashift=#, где # может принимать значения от 9 (сектор 512 байт) до 16 (сектор 64 КБ). Однако для начала я её опустил — это соответствует значению ashift=0, при котором размер сектора определяется автоматически.

Впрочем, первая попытка создания пула завершилась сообщением об ошибке — вероятно, диск нёс на себе следы прежней, достаточно бурной, жизни. И тогда, в соответствие с рекомендацией сообщения, я повторил команду в принудительной (force) форме:

# zpool create -f tank sdb

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

# zpool status tank
  pool: tank
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          sdb       ONLINE       0     0     0

errors: No known data errors

Теперь можно было приступать к создания файловых систем внутри пула. Я проделал это с помощью следующей серии команд:

# zfs create tank/data
zfs create tank/current
zfs create tank/video
zfs create tank/audio
zfs create tank/other

Почему именно так — здесь и сейчас обсуждать неуместно, отложим до другого раза. А пока замечу только, что на этом процедура практически и закончилась: пул был создан и смонтирован в каталог /tank, где он выступил в качестве корня для остальных своих файловых систем, в чём лего было убедиться такой командой:

$ mount | grep tank
tank on /tank type zfs (rw,noatime,xattr)
tank/audio on /tank/audio type zfs (rw,noatime,xattr)
tank/current on /tank/current type zfs (rw,noatime,xattr)
tank/data on /tank/data type zfs (rw,noatime,xattr)
tank/other on /tank/other type zfs (rw,noatime,xattr)
tank/video on /tank/video type zfs (rw,noatime,xattr)

В этом выводе можно видеть, что все файловые системы внутри zpool’а смонтированы с опциями xattr и noatime. Первая устанавливается по умолчанию, а вот вторая, используемая пущей производительности для, требует установки уже руками:

zfs set atime=off tank

С помощью субкоманды set можно задать и другие опции, например, использование компрессии или отказ от подсчёта контрольных сумм (что опять же может на пару грамм прибавить быстродействия). И опции эти можно определить не только для пул в целом, а для отдельных файловых систем. Например, опцию checksum=off целесообразно использовать для всякого рода «парнухи» (в моём примере — для файловых систем /tank/audio и /tank/video), а опцию compression=on — для файловых систем, содержащих преимущественно текстовые документы. Впрочем, по первому разу я ни ту, ни другую не использовал.

В отличие от опций монтирования традиционных файловых систем, выполнить субкоманду set для какой-либо файловой системы ZFS можно в любой момент времени в течении сеанса работы — и она тут же будет задействована. Однако важно помнить, что обратной силы она не имеет, и действие её будет распространяться только на вновь записываемые данные.

Теперь остаётся сделать последнюю операцию: так как я предназначил все файловые системы внутри пула ZFS для хранения пользовательских данных, требуется предоставить к ним доступ для этого самого пользователя. Что делается самым обычным способом, например, сменой владельца файловых систем внутри каталога /tank — я поступил именно так:

# chown -R alv:users /tank/*

Либо можно создать специальную группу для файловых систем zpool’а, члены которой имеют право на запись в них, и включить в неё соответствующего пользователя, то есть себя. Заинтересованным предлагается самостоятельно обдумать, как лучше это сделать.


Содержание