Всё имеет свое начало...
2. Варианты установки

Глава из книги Сага о FreeBSD

Алексей Федорчук

2008-11-12

назад | к началу

Установка для использования ZFS

В предыдущем разделе мы увидели, что создание программного RAID'а — занятие довольно сложное, хотя и выгодное с точки зрения удобства и повышения производительности. И потому может возникнуть резонный вопрос — а нет ли более простого способа совместного использования нескольких дисков? С недавнего времени (с выхода FreeBSD версии 7.0) ответ на него будет положителен: таким способом является задействование файловой системы ZFS.

Разговор о том, что такое ZFS, как она устроена и зачем нужна — еще предстоит (в соответствующей главе). Пока лишь замечу, что ZFS — не только (а может быть, и не столько) собственно файловая система, но и менеджер разделов, исполняющий также функции средств создания и управления программными RAID-массивами и (или) логическими томами (LVM). Однако ZFS гораздо проще как в создании, так и в употреблении. В частности, она, благодаря динамическому перераспределению дискового пространства между файловыми системами, позволяет при необходимости легко наращивать объем любой из них, да и вообще избавляет от необходимости расчета размера разделов. Собственно говоря, одной из главных целей разработчиков ZFS было — сделать обращение с файловыми системами столь же простым, как с обычными каталогами. И скоро мы увидим, что цель эта была ими достигнута.

Во всей красе ZFS показывает себя при наличии в машине двух и более физических дисков, однако это не обязательное требование — большинство её преимуществ можно почувствовать и при установке на единичный диск. Более важным является достаточное количество оперативной памяти: разработчики рекомендуют не менее 2 Гбайт оной и предупреждают, что на машинах с 1 Гбайт и менее производительность ZFS резко понизится. Предлагается также использовать swap-раздел по полной программе — равным удвоенному объему ОЗУ. Разумеется, эти требования можно полностью реализовать только в 64-битном варианте FreeBSD (причём только в версиях седьмой ветки) — и, соответственно, наличие процессора с 64-битными инструкциями становится практически обязательным. И вообще, ZFS весьма интенсивно использует ресурсы машины, в частности, и вычислительные. Так что это как раз тот случай, когда обычно "лишние" гигагерцы процессора придутся ко двору.

И ещё важное предупреждение: поддержка ZFS в текущих версиях FreeBSD (7.0 и пре-релизных вариантах 7.1) носит экспериментальный характер и потому с её стороны не исключены всякого рода неожиданности. О тех из них, с которыми пришлось столкнуться мне, я расскажу в соответствующем месте — впрочем, фатальных среди них не было. Пока же предлагаю отдавать себе отчет, что вы используете ZFS на свой страх и риск.

Ну а теперь — приступим к делу. Главное, на чем стоит остановить внимание в преддверии использования ZFS — это стратегия дисковой разметки. Ведь, хотя она и поддерживается в «семерке», что называется, почти «из коробки», но именно что почти: с помощью sysinstall задействовать ее не удастся. Так что главная наша задача — установить базовую систему таким образом, чтобы потом большую ее часть перенести на ZFS с минимальными затратами сил и времени.

Корневую файловую систему можно разместить на ZFS только с некоторыми ухищрениями (как именно — будет описано в соответствующей главе). Да и смысла большого в том я не вижу — если вынести из корня все ветви, относимые, по классификации HFS, к разделяемым и (или) изменяемым (а по моей — также к трудновосстановимым), то изменяться его содержимое будет только при пересборках ядра и «мира», а это, согласитесь, бывает не так часто. Так что, фактически, то, на какой файловой системе лежит корень файловой иерархии, волнует весьма мало.

Исходя из этого, создаем на первом диске слайс минимального размера и делим его на два раздела — 512 Мбайт под корень файловой иерархии и 2xRAM — под раздел подкачки. В принципе, пространство подкачки можно разнести на два раздела на разных дисках, как это было описано ранее. А можно и своппинг организовать на пуле ZFS, хотя особых преимуществ от этого я пока не вижу.

Всё оставшееся дисковое пространство на обоих дисках определяем как BSD-слайсы — они-то и составят со временем пул ZFS, на котором разместятся такие ветви файловой иерархии, как /var, /usr и прочие.

Далее отправляемся в пункт Distributions — и там заказываем установку базовой системы и ядра, а дополнительно попросим еще и man pages — без них будет очень скучно при разборках с ZFS.

Далее все происходит обычным порядком, многократно описанным выше: сами собой происходят разметка диска, устанавливаются заказанные компоненты. После чего переходим в пункт Configuration, где задаем пароль root'а, определяем часовой пояс и настраиваем консоль для кириллицы. От создания аккаунта обычного пользователя воздерживаемся — его домашний каталог будет вынесен на ZFS, и во избежание лишних телодвижений сделаем это позднее. А вот сетевые интерфейсы — пожалуй, что и настроим, при использовании DHCP это делов на пять секунд (а случай отсутствия оного здесь не обсуждается). Не будем также устанавливать никаких дополнительных пакетов — после создания ZFS-разделов мы все это проделаем гуртом. Хотя уже и не из sysinstall — эта программа файловую систему ZFS не понимает в упор, ведь она писалась во времена, когда о ней еще и слыхом не слыхивали.

Теперь остается только перезагрузиться и выполнить некоторые настройки. Перво-наперво, чтобы не забыть, обеспечиваем поддержку ZFS при старте системы. Для чего вписываем в файл /boot/loader.conf строку

zfs_load="YES"

А в файл /etc/rc.conf —

zfs_enable="YES"

Теперь для организации ZFS на оставшихся неразмеченными слайсах нам потребуется две команды — zpool и zfs (соответствующие им сведения от тёти Мани не грех предварительно почитать).

Первая из указанных команд создает пул накопителей следующим образом:

# zpool create [имя_пула] [уровень_избыточности] ad0s2c ad2s1c

Имя пула — традиционно tank (хотя никакого рояля это не играет). Если избыточность не нужна (а в десктопной сфере она не нужна точно), то соответствующий параметр просто опускается — при этом мы получим нечто вроде программного RAID-0.

После этого начинается самый охмурёж — собственно создание файловых систем, для чего обращаемся к команде zfs. Для начала надо разобраться с ветвями /var и /usr (предполагается, что ветвь /tmp будет вынесена на mfs).

С первой все предельно просто: создаем под нее файловую систему командой

# zfs create tank/var

и до поры, до времени забываем о ее существовании.

С ветвью /usr — чуть сложнее, она содержит множество различных подкаталогов, часть из которых не помешает выделить в самостоятельные файловые системы. Так что — поехали по порядку. Посредством

# zfs create tank/usr

создаем исходную точку отсчета. Затем —

# zfs create tank/usr/ports

Далее — подкаталог /usr/ports/distfiles, содержащий исходники для собираемых посредством портов программ:

# zfs create tank/usr/ports/distfiles

Есть резон выделить в отдельные файловые системы и ветви /usr/local, /usr/src и /usr/obj — ведь это так просто (особенно учитывая, что отныне мы не связаны схемой BSD-разметки — 8 разделов на один слайс; а почему — это тема отдельного разговора):

# zfs create tank/usr/local
# zfs create tank/usr/src
# zfs create tank/usr/obj

И напоследок — домашние каталоги пользователей (которых у нас пока еще нет). По умолчанию во Free BSD они располагаются в /usr/home (просто /home — символическая ссылка на него). Отказываться от этого нет резона (почему — вскоре станет ясно), так что:

# zfs create tank/usr/home
# zfs create tank/usr/home/username1

и так далее.

Как я уже говорил ранее, на десктопной машине есть смысл выделить отдельные файловые системы под данные, доступ к которым потребуется нескольким пользователям, например:

# zfs create tank/usr/home/work
# zfs create tank/usr/home/data
# zfs create tank/usr/home/media
...

и так далее. Только потом нужно будет не забыть озаботиться установкой соответствующих атрибутов принадлежности и доступа для всех ветвей в каталоге /usr/home.

Предпоследний штрих — ускорения файловых операций ради отменяем для всех новообразованных файловых систем атрибут atime (обновление времени доступа, каковое и на фиг не нужно):

# zfs set atime-off tank

что автоматически распространяется на все вложенные файловые системы (потому и резонно было сделать tank/usr/home — всё одним телодвижением меньше).

Вот и все — почти. Перемещаем содержимое /var и /usr в /tank/var и /tank/usr, соответственно:

# mv /var/* /tank/var/
# mv /usr/* /tank/usr/

На сообщение о невозможности переместить кое-что из каталога /var внимания не обращаем — вреда от этого не будет ни малейшего.

Вот теперь — уже самое последнее: монтирование подкаталогов tank в реальную файловую иерархию:

# zfs set mountpoint=/var tank/var
# zfs set mountpoint=/usr tank/usr

После чего начинаем обычную работу. Ни перезагрузок, ни каких-либо записей в /etc/fstab не требуется. Впрочем, чтобы в этом убедиться, можно выполнить и рестарт машины. А потом командой типа df поглядеть, что у нас делается со свободным местом на дисках. И увидеть, что каждая из файловых систем ZFS потенциально располагает 240 примерно гигабайтами дискового пространства. Что, по мере его расходования, будет убывать пропорционально — опять же для всех. Действительно все ничуть не сложнее, чем создавать каталоги командой mkdir.

назад | к началу