В наши дни все большей и большей популярности набирают файловые системы следующего поколения, которые имеют более широкую функциональность, чем в обычных файловых системах. Одни из таких файловых систем - это 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. Надеюсь, эта информация была полезной для вас, если у вас остались вопросы, спрашивайте в комментариях!
Отличная статья!
Спасибо за великолепную статью. Очень познавательно.
Есть один минус...
Если устанавливать Android-x86 OS, в частности в режиме Dual Boot (т.е., как бы внутри Linux), то запустить Андрюшу не удастся!
Андрюша поддерживает из Линя только ф/с Ext...
Самое классное - использование ZFS для полноценной работы/загрузки ОС а-ли Solaris
Автор не понимает ZFS - совсем. Где виды пулов ? Чем отличается mirror от raidz (x) ?
Благодарю за отличную статью. Очень познавательно.
Пересказ мана с ошибками 🙁
zfs diff позволяет посмотреть, какие файлы были изменены
zpool add добавляет устройство к пулу.
Остальное по мелочам...
Ну, ладно, трешь неприятные комментарии. Текст-то поправь...
zfs diff позволяет получить список измененных файлов, а zpool add добавляет диск к пулу. Команда опасная, я так однажды вместо зеркала RAID0 сделал.
"ZFS - это файловая система, объединенная с менеджером логических томов. Ее разработка началась в компании Sun Microsystems для ОСhttps://losst.pro/fajlovaya-sistema-btrfs Solaris. " ссылочка затерялась в тексте
Есть вопрос. Как сделать зеркало из трёх дисков разного размера?
Есть 3 диска разного размера 0,5Тб, 1Тб и 2Тб. Хочется сделать один пул (raid0) из дисков 0,5 и 1Тб общим размером 1,5Тб и объединить его в зеркало с таким же размером на третьем двухтерабайтным диском, а оставшиеся 0,5Тб двухтерабайтного диска использовать под отдельную файловую систему.
Собственно в этом и вопрос, как это сделать?
Вот хорошая статья по ZFS: http://bog.pp.ru/work/zfs.html#arc
Поставил 20.04 с ZFS в системе 2 HDD снёс систему ,поставил другую ,на обоих дисках -25 гигов ярлык на столе якобы Флоппи диск ,я так понял это остатки пула (зеркало),если знаете подскажите способ вернуть размер дисков ,низкоуровневое форматирование не роляет ,видимо придётся скачивать образ диска от производителя и переписывать диск. (WD)
А не подскажете в чем у меня может быть проблема.
[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
action: The pool can be imported using its name or numeric identifier.
>>> id: 7658210039209464059
хотя видно, что 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
Можно ли указать необходимость хранения копий файлов для конкретной папки. То есть котики и киношки не имют копии, А сканы документов имеют копии на двух или трёх дисках, чтобы выход одного из строя их не повредил. Чтобы можно было просто воткнуть этот хард в другой комп и скачать данные? (как в stablebit drivepool)