Алексей Федорчук
Ubuntu’вы страсти, 10.06.2013
Что такое ZFS, для чего предназначена и чем хороша — говорить не время и не место. Исходим из предположения, что читатель либо это уже знает и хочет её использовать, либо у него появилось желание с ней ознакомиться и поэкспериментировать. В обоих случаях первый шаг — обеспечить её поддержку системой.
Подключение репозитория
Официально ZFS в Ubuntu не поддерживается по лицензионным соображениям. Однако соответствующие пакеты, созданные волонтёрами, имеются в репозитории PPA. Причём эти пакеты собраны не в виде статических модулей kmod
, привязанных к конкретной версии ядра, а реализованы как сценарии dkms
, обеспечивающие сборку модулей под версию ядра текущего.
Чтобы задйствовать модули поддержки ZFS в Ubuntu для начала требуется подключить нужный PPA-репозиторий. Поскольку все последующие действия потребуют прав суперпользователя, перво-наперво обретаем их на длительное время командой
$ sudo -i
А затем собственно подключаем репозиторий:
# apt-add-repository ppa:zfs-native/daily
и обновляем кэш:
# apt-get update
Сборка модулей
Теперь собираем необходимые пакеты:
# apt-get install ubuntu-zfs
Поскольку в репозитории они существуют не в бинарном виде, а в виде исходников, приведённая команда потянет за собой весь необходимый инструментарий — gcc
, bunutils
и так далее. И сама сборка пакетов займёт некоторое время, зависящее от мощности машины. Но рано или поздно она закончится, и можно будет скомандовать
# modprobe zfs
Теперь можно выйти из режима суперпользователя и проверить результат командой
$ lsmod | grep zfs
вывод которой будет выглядеть примерно так:
zfs 1158757 4 zcommon 51283 1 zfs znvpair 81997 2 zfs,zcommon zavl 15011 1 zfs zunicode 331226 1 zfs spl 88617 5 zfs,zcommon,znvpair,zavl,zunicode
Альтернативный способ проверки — команда
$ dmesg | grep -i zfs
Она должна дать на выходе нечто вроде этого:
[ 1.133492] ZFS: Loaded module v0.6.1-rc14, ZFS pool version 5000, ZFS filesystem version 5
Всё, система готова к работе с ZFS — ныне, и присно, и во веки веков. Никаких дополнительных действий, вроде перезагрузки чего бы то ни было, не требуется: можно сразу приступать к созданию пула ZFS и файловых систем на нём, или подключать пул уже существующий.
Подключение существующего пула
Перво-наперво нужно перезагрузиться в ту систему, в которой создавался пул (в моём случае это была openSUSE), и экспортировать его командой:
# zpool export data
где data
— имя пула с точкой монтирования /home/data
.
Следующий шаг — вернуться в Ubuntu и создать в ней аналогичную точку монтирования для пула ZFS — в моём случае таким образом:
$ sudo mkdir /home/data
Дать ей атрибуты принадлежности обычному пользователю:
$ sudo chown -R alv:alv /home/data
И импортировать созданный в openSUSE пул ZFS:
$ sudo zpool import -f data
Не забыв об опции -f
, предписывающей принудительной выполнение импорта. Без неё ответом на эту команду будет сообщение об ошибке.
Теперь в каталоге /home/data
можно видеть те же самые файловые системы ZFS, которые были созданы в родительской для пула системе, вместе со всеми размещёнными в них данными. С которыми можно начинать работать.
Сказанное справедливо, если идентификаторы пользователя в обеих системах совпадают — в моём случае это именно так. Однако в случае общем это совсем не обязательно — и тогда надо озаботиться каким-либо способом обеспечения совместного доступа к ним из разных систем. Например, созданием специальной группы с правами чтения, записи и исполнения для её членов, и включением в неё соответствующих пользователей. Впрочем, к ZFS, о которой мы сейчас разговариваем, это не относится.