Главная >> Система >> Файловая система ZFS

Файловая система ZFS

В наши дни все большей и большей популярности набирают файловые системы следующего поколения, которые имеют более широкую функциональность, чем в обычных файловых системах. Одни из таких файловых систем - это Btrfs и ZFS, Обе они уже стали достаточно стабильными и активно применяются пользователями. Для многих пользователей очень важна сохранность данных, и такие файловые системы могут обеспечить ее наилучшим образом.

В одной из предыдущих статей мы рассматривали файловую систему Btrfs. В нашей сегодняшней статье мы остановимся на ZFS, эти файловые системы похожи по своему применению и назначению, но имеют некоторые отличия. Мы рассмотрим как установить эту файловую систему в вашем дистрибутиве, настроить ее и использовать для решения повседневных задач.


Содержание статьи

Что такое ZFS?

ZFS - это файловая система, объединенная с менеджером логических томов. Ее разработка началась в компании Sun Microsystems для ОС Solaris. Файловая система выпускалась под открытой лицензией Common Development and Distribution License (CDDL). Она была предназначена для высокопроизводительных серверов, поэтому уже тогда поддерживала мгновенные снимки и клонирование данных. Но после покупки ее компанией Oracle, исходный код был закрыт, а сообщество создало форк последней доступной версии под именем OpenZFS. Именно эту файловую систему сейчас и можно установить и использовать.

Файловая система ZFS имеет обычные для таких файловых систем возможности. Это просто огромный размер одного раздела, и размер файла, поддерживается возможность хранения файлов на нескольких устройствах, проверка контрольных сумм для данных и шифрование на лету, а также запись новых данных в режиме COW, когда данные не переписываются, а пишутся в новое место, что позволяет делать мгновенные снапшоты.

Возможности очень похожи на Btrfs, но есть кое-какие отличия. В Btrfs можно посмотреть все файлы, измененные с момента последнего снапшота. Второе отличие, это отсутствие в Btrfs логических блоков zvol.

Установка ZFS

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

sudo apt install -y zfs

В других дистрибутивах. например, CentOS или Fedora ситуация немного сложнее, сначала вам придется добавить официальный репозиторий, а затем установка zfs и самого набора утилит и модулей ядра:

sudo yum install http://download.zfsonlinux.org/epel/zfs-release.el7_3.noarch.rpm
$ sudo yum install zfs

Затем осталось включить загрузить модуль ядра с поддержкой этой файловой системы:

sudo modprobe zfs

Теперь файловая система установлена и готова к использованию. Дальше нам нужно выбрать разделы и создать на них файловые системы. Для настройки zfs используется утилита zpool, но для начала давайте рассмотрим ее синтаксис и возможности. Файловая система может быть расположена на нескольких разделах или жестких дисках, поэтому на уровне ядра формируется общий пул (куча), а к нему уже подключаются разделы. Тут можно провести аналогию с группой томов LVM.

Команда zpool

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

$ zpool команда параметры опции устройства

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

  • add - добавить раздел к существующему пулу;
  • attach - добавить раздел или жесткий диск к пулу файловой системы;
  • clean - очистить все ошибки дисков;
  • create - создать новый пул из физического раздела, на котором будут размещены виртуальные диски;
  • destroy - удалить пул разделов zfs;
  • detach - отключить физический раздел от пула;
  • events - посмотреть сообщения ядра, отправленные модулем zfs;
  • export - экспортировать пул для переноса в другую систему;
  • get - посмотреть параметры пула;
  • set - установить значение переменной;
  • history - отобразить историю команд zfs;
  • import - импортировать пул;
  • iostat - отобразить статистику ввода/вывода для выбранного пула zfs;
  • list - вывести список всех пулов;
  • offline/online - выключить/включить физическое устройство, данные на нем сохраняются, но их нельзя прочитать или изменить;
  • remove - удалить устройство из пула;
  • replace - перенести все данные со старого устройства на новое;
  • scrub - проверка контрольных сумм для всех данных;
  • status - вывести статус пула.

Это были все основные опции команды, которые мы будем использовать. Теперь рассмотрим примеры настройки zfs и управления разделами.

Как пользоваться ZFS

Настройка ZFS не очень сильно отличается от Btrfs, все базовые действия выполняются очень просто, вы сами в этом убедитесь.

Создание файловой системы

Сначала посмотрим есть ли уже созданные пулы ZFS. Для этого выполните такую команду:

sudo zpool list

Если вы устанавливаете эту файловую систему в первый раз, то здесь будет пустой список. Теперь создадим пул на основе существующего раздела, мы будем использовать раздел /dev/sda6

sudo zpool create -f pool0 /dev/sda6

Хотя вы можете использовать не только раздел, а целый диск. Теперь смотрим еще раз список пулов:

sudo zpool list

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

sudo zpool create pool0 zraid /dev/sda /dev/sdb /dev/sdc

Обратите внимание, что диски должны иметь одинаковый раздел. Если вам не нужен RAID, вы можете настроить обычное зеркалирование на второй диск. Это увеличивает надежность хранения данных:

sudo zpool create pool0 mirror sda sdb

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

Вы можете добавить новый жесткий диск или раздел к пулу:

sudo zpool attach pool0 /dev/sdd

Или удалить устройство из пула:

sudo zpool detach pool0 /dev/sdd

Чтобы удалить пул используйте команду destroy:

sudo zpool destroy pool0

Для проверки раздела на ошибки используйте команду scrub:

sudo zpool scrub pool0

Статистику использования пула можно посмотреть с помощью команды iostat:

sudo zpool iostat pool0

Файловые системы ZFS

Теперь нужно создать файловые системы на только что созданном пуле. Создадим три файловые системы, data, files и media. Для этого используется команда zfs:

sudo zfs create pool0/data
$ sudo zfs create pool0/files
$ sudo zfs create pool0/media

Файловые системы готовы, дальше рассмотрим монтирование zfs.

Монтирование ZFS

Точка монтирования для пула и для каждой созданной в нем файловой системы создается в корневом каталоге. Например, в нашем случае точки монтирования выглядят так:

ls -l /pool0

Или можно использовать такую команду:

sudo zfs mount

Чтобы размонтировать файловую систему для одного из созданных разделов используйте команду zfs umount:

sudo zfs umount /pool0/data

Затем можно ее обратно примонтировать:

sudo zfs mount pool0/data

Параметры файловой системы

Кроме всего прочего, вы можете настроить различные параметры файловой системы ZFS, например, можно изменить точку монтирования или способ сжатия. Вы можете посмотреть все текущие параметры для файловой системы или пула с помощью команды:

sudo zfs get all pool0/files

Сначала включим сжатие:

sudo zfs set compression=gzip pool0/files

Затем отключим проверку контрольных сумм:

sudo zfs set checksum=off pool0/files

Смотрим точку монтирования:

sudo zfs get mountpoint pool0/files 

Затем установим свою:

sudo zfs set mountpoint=/mnt pool0/files 

Теперь раздел будет монтироваться в /mnt, настройки можно изменить для каждого из разделов.

Снимки состояния ZFS

Снапшоты zfs или снимки состояния могут использоваться восстановления данных. Благодаря особенностям файловой системы снимки можно создавать мгновенно. Для создания снимка просто наберите:

sudo zfs snapshot pool0/files pool0/files@shot1

Для восстановления используйте:

sudo zfs rollback pool0/files@shot1

Посмотреть список снимков вы можете командой:

sudo zfs list -t snapshot

А удалить ненужный снимок:

sudo zfs destroy pool0/files@shot1

Выводы

В этой статье мы рассмотрели как работает файловая система zfs, как выполняется настройка zfs и как ее использовать. Это очень перспективная файловая система, с огромным набором функций, которая способна сравняться, а в некоторых областях и обойти Btrfs. Надеюсь, эта информация была полезной для  вас, если у вас остались вопросы, спрашивайте в комментариях!

16 комментариев к “Файловая система ZFS”

  1. Есть один минус...
    Если устанавливать Android-x86 OS, в частности в режиме Dual Boot (т.е., как бы внутри Linux), то запустить Андрюшу не удастся!
    Андрюша поддерживает из Линя только ф/с Ext...

    Ответить
  2. Ну, ладно, трешь неприятные комментарии. Текст-то поправь...

    zfs diff позволяет получить список измененных файлов, а zpool add добавляет диск к пулу. Команда опасная, я так однажды вместо зеркала RAID0 сделал.

    Ответить
  3. "ZFS - это файловая система, объединенная с менеджером логических томов. Ее разработка началась в компании Sun Microsystems для ОСhttps://losst.pro/fajlovaya-sistema-btrfs Solaris. " ссылочка затерялась в тексте

    Ответить
  4. Есть вопрос. Как сделать зеркало из трёх дисков разного размера?
    Есть 3 диска разного размера 0,5Тб, 1Тб и 2Тб. Хочется сделать один пул (raid0) из дисков 0,5 и 1Тб общим размером 1,5Тб и объединить его в зеркало с таким же размером на третьем двухтерабайтным диском, а оставшиеся 0,5Тб двухтерабайтного диска использовать под отдельную файловую систему.
    Собственно в этом и вопрос, как это сделать?

    Ответить
  5. Поставил 20.04 с ZFS в системе 2 HDD снёс систему ,поставил другую ,на обоих дисках -25 гигов ярлык на столе якобы Флоппи диск ,я так понял это остатки пула (зеркало),если знаете подскажите способ вернуть размер дисков ,низкоуровневое форматирование не роляет ,видимо придётся скачивать образ диска от производителя и переписывать диск. (WD)

    Ответить
  6. А не подскажете в чем у меня может быть проблема.

    [root@leasing-storage01 pool]# zpool import
    pool: pool
    id: 7658210039209464059
    state: ONLINE
    action: The pool can be imported using its name or numeric identifier.
    config:

    pool ONLINE
    sdc ONLINE
    [root@leasing-storage01 pool]# zpool import /pool/ pool
    cannot import '/pool/': no such pool available

    видно что пул есть, но при импорте пишет I/O error

    Ответить
  7. хотя видно, что sdc1 является членом zfs
    [root@leasing-storage01 pool]# sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
    NAME FSTYPE SIZE MOUNTPOINT LABEL
    sr0 iso9660 680M CentOS 7 x86_64
    sda 10G
    ├─sda1 ext4 500M /boot
    └─sda2 LVM2_member 9.5G
    ├─vg_leasingtemplatecentos6-lv_root (dm-0) ext4 8.5G /
    └─vg_leasingtemplatecentos6-lv_swap (dm-1) swap 1G [SWAP]
    sdb LVM2_member 2T
    └─lvm_data-lvm_data_volume (dm-2) ext4 2T /data_lvm
    sdc 13.5T
    ├─sdc1 zfs_member 13.5T pool
    └─sdc9 8M

    Ответить
  8. Можно ли указать необходимость хранения копий файлов для конкретной папки. То есть котики и киношки не имют копии, А сканы документов имеют копии на двух или трёх дисках, чтобы выход одного из строя их не повредил. Чтобы можно было просто воткнуть этот хард в другой комп и скачать данные? (как в stablebit drivepool)

    Ответить

Оставьте комментарий