Освоив основные понятия, данные на предыдущей странице, мы научимся понимать ZFS. Для обратной же задачи — чтобы ZFS понимала нас — нужно ознакомиться с её командами. Главные из них — две:

  • zpool для создания и управления пулами, и
  • zfs для создания и управления наборами данных.

Немного, правда? Хотя каждая из этих команд включает в себя множество субкоманд, с которыми мы со временем разберёмся.

Очевидно, что работу с ZFS следует начинать с создания пула хранения. Начнём с этого и мы. В простейшем случае однодисковой конфигурации это делается так:

# zpool create pool_name dev_name

Здесь create — субкоманда очевидного назначня, pool_name — имя создаваемого пула (в примерах обычно даётся имя tank, но на самом деле оно может быть любым — с учётом ограничений, указанных на прошлой странице), а dev_name — имя устройства, включаемого в пул. Каковое может строиться по одной из моделей, описанных ранее. И, чтобы не повторяться, напомню: все команды по манипуляции с пулами и наборами данных на них выполняются от лица администратора.

В случае, если в состав пула включается один диск, и второго не предвидится, можно использовать имя устройства верхнего уровня — например, sda для цельного устройства (обратим внимание, что путь к файлу устройства указывать не нужно). Однако реально такая ситуация маловероятна — загрузка с ZFS проблематична, так что как минимум потребуется раздел с традиционной файловой системой под /boot (и/или под корень файловой иерархии), так что команда примет вид:

# zpool create mypool sda2

Однако если можно ожидать в дальнейшем подсоединения новых накопителей и их включения в существующий пул, то лучше воспользоваться именем по модели by-id, например:

# zpool create mypool ata-ata-ST3500410AS_5VM0BVYR-part2

Очевидно, что в случае однодискового пула ни о какой избыточности говорить не приходится. Однако уже при двух дисках возможны варианты. Первый — создание пула без избыточности:

# zpool create mypool dev_name1 dev_name2

Где dev_name1 и dev_name1 — имена устройств в принятой модели именования. Для условных примеров в дальнейшем я упрощения ради буду приводить имена «верхнего уровня». Однако напомню, что в реальной ситуации лучше использовать модель by-id: прочие, более сложные, модели именования, такие, как by-path и /dev/disk/zpool, в условиях настольной машины не оправданы.

В приведённом случае будет создано нечто вроде RAID’а нулевого уровня, с расщеплением (stripping) данных на оба устройства. Каковыми могут быть как дисковые разделы, так и диски целиком. Причём, в отличие от RAID0, диски (или разделы) не обязаны быть одинакового размера. Иллюстрирую это чисто условным примером создания пула из двух флэшек — 4 и 16 ГБ:

# zpool create mypool sdd sdf
invalid vdev specification
use '-f' to override the following errors:
/dev/sdd does not contain an EFI label but it may contain partition
information in the MBR.

Можно видеть, что «лобовая» попытка не удалась, однако и предложен выход — использование опции -f (от force):

# zpool create -f mypool sdd sdf

После чего никаких сообщений не последует. No news — good news, говорят англичане: в данном случае это означает, что пул был благополучно создан. В чём можно немедленно убедиться двумя способами. Во-первых, в корневом каталоге появляется точка его монтирования /mypool. А во-вторых, этой цели послужит субкоманда status:

# zpool status mypool

которая выведет нечто вроде этого:

pool: mypool
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        mypool      ONLINE       0     0     0
          sdd       ONLINE       0     0     0
          sdf       ONLINE       0     0     0

errors: No known data errors

А с помощью субкоманды list можно узнать объём новообразованного пула:

# zpool list mypool
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
mypool  18,9G    93K  18,9G     0%  1.00x  ONLINE  -

Легко видеть, что он равен сумме объёмов обеих флэшек, если «маркетинговые» гигабайты пересчитать в «настоящие».

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

# zpool list
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
mypool  18,9G    93K  18,9G     0%  1.00x  ONLINE  -
tank     199G  20,8G   178G    10%  1.00x  ONLINE  -

Обращаю внимание, что даже чисто информационные субкоманды вроде list и status требуёт прав администратора. При попытке дать их от имени обычного пользователя мы получим вот это:

$ /usr/sbin/zpool list mypool
Unable to open /dev/zfs: Permission denied.
Unable to open /dev/zfs: Отказано в доступе.

Разумеется, два пула в одной, да ещё и настольной, машине — излишняя роскошь. Так что пул, созданный в экспериментальных целях, подлежит уничтожению, что делается с помощью субкоманды destroy:

# zpool destroy mypool

После чего он пропадёт из списка пулов:

# zpool list
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
tank   199G  20,8G   178G    10%  1.00x  ONLINE  -

Назад | Рассказы о ZFS | Вперёд