Установка ubuntu на zfs raid

Обновлено: 04.07.2024

ZFS (Zettabyte File System) — это файловая система и одновременно менеджер логических томов. Была создана в Sun Microsystems для операционной системы Solaris и принадлежит сейчас Oracle. ZFS является проектом с открытым исходным кодом и лицензируется под CDDL (Common Development and Distribution License) из-за которой возникли проблемы с быстрым появлением ZFS в Linux. В Linux перенос ZFS на уровень ядра считался юридически невозможным из-за несовместимости лицензий CDDL, под юрисдикцией которой находится ZFS, и GNU GPL, под юрисдикцией которой находится Linux.

В мае 2010 года Брайан Белендорф (Brian Behlendorf) представил проект, в рамках которого ведется работа по реализации родной поддержки файловой системы ZFS для Linux. Для обхода лицензионного ограничения Белендорф воспользовался простым и очевидным методом — он решил распространять свой продукт целиком под лицензией CDDL в виде отдельно загружаемого модуля, который поставляется отдельно от ядра.

До этого ZFS запускали через FUSE, которая работает в пространстве пользователя, а это медленно для систем хранения.

Для чего нужен ZFS пользователям дома?

Упрощается создание для дома программных RAID массивов для хранения огромных медиа хранилищ. Ранее можно было создавать массивы через менеджера томов LVM и собственно файловых систем типа ext4. С ZFS, которая и менеджер томов и файловая система, то есть 2 в 1, знать нужно только команды ZFS.

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

zfs create zfs-vasilisc/important
zfs set copies=3 zfs-vasilisc/important

Для папок с не критичными, огромными медиа файлами можно отключить определённые технологии, типа контрольных сумм, и чуток ускорить работу с такими данными. Но разработчики настоятельно просят этого не делать, так как это мало что ускорит, по их словам, а выключатся некоторые вкусные плюшки в ZFS типа scrubbing. Благодаря контрольным суммам, ZFS может всегда сказать есть ли повреждения в данных на диске, особенно в редкоиспользуемых местах (cold data).

zfs create zfs-vasilisc/music
zfs set checksum=off zfs-vasilisc/music

У ZFS очень много плюсов и каждый найдёт себе наиболее нужное.


Как получить ZFS в Ubuntu?
На данный момент, пакет ubuntu-zfs позволит получить доступ к zpool версия 28 и zfs версия 5.

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

1) Установите Ubuntu.
2) Подсоедините еще 2 диска для тестирования одной из разновидностей RAID.
3) Разбейте диски на разделы. 1 диск = 1 раздел. Можете использовать cfdisk или любой на ваш вкус. Далее по тексту будем считать, что у вас получатся два раздела /dev/sdb1 и /dev/sdc1
4) Обновите систему sudo apt-get update && sudo apt-get upgrade .
5) Установите пакеты sudo apt-get install python-software-properties bison flex build-essential libelf-dev zlib1g-dev libc6-dev-i386 libdwarf-dev binutils-dev
6) Добавьте zfs-native репозиторий sudo add-apt-repository ppa:zfs-native/stable
7) Установите ubuntu-zfs sudo apt-get update && sudo apt-get install ubuntu-zfs
9) Создайте новый пул zpool через sudo zpool create zfs-vasilisc raidz /dev/sdb1 /dev/sdc1 . Здесь, “zpool create” даёт имя “zfs-vasilisc” и указывает использовать raidz. Два диска “/dev/sdb1 /dev/sdc1” будут частью пула.
10) Проверьте ваш новый пул zpool sudo zpool status
11) Проверьте zfs-vasilisc через команду sudo zfs list
12) Посмотрите что вы наблюдаете через df -h
13) Изучайте возможности ZFS и реализуйте свои задумки.


ZFS - это файловая система на стероидах. С помощью ZFS можно собрать подобие RAID-массивов, но с дополнительными функциями, которые могут быть полезны в хозяйстве. Здесь покажу как установить zfs и собрать аналог RAID-10 массива на примере Ubuntu 18.04

Установка zfs

Изначально ZFS была доступна только в Solaris, но с помощью модулей ядра можно установить и в Linux.

На последних версиях Ubuntu установка абсолютно элементарная:

Автоматически устанавливаются модули ядра, а также тулзы для создания разделов.

В терминах zfs - сначала создается pool из разделов или дисков, потом на этот pool накатывается файловая система. Все как и в случае с raid-ами.

Создание pool-а

Пока никаких пулов не создано:

Создаем пул из сырых дисков. Пул можно также создавать из разделов диска (/dev/sdb1, /dev/sdc2 etc.):

Эта команда создала пул аналогичный RAID0(stripe) - без резервирования. Автоматически на этот пул накатывается ФС.

Смотрим созданные в системе пулы:

После создания пула, просиходит его автомаунт в /

После выполнения сразу произойдет umount старой директории и mount в новой

Аналог RAID1 и RAID10

Выше мы создавали пул, аналогичный RAID0(stripe), без какого-либо резервирования данных. Если умрет хотя бы один диск из пула, то развалится весь пул. Чтобы повысить отказоустойчивость - создадим зеркалированный пул.

Вот так можно создать RAID1(mirror) с помощью zfs:

Создание RAID10 из шести (sdb, sdc, sdd, sde, sdf, sdg) дисков выглядит так:

цепочки mirror disk1 disk2 можно продолжать и дальше

Проверяем состояние пула

Проверить состояние всех пулов можно так:

Вот так выглядит zpool status когда умер один диск:

Как заменить диск в zfs пуле

Если случилась беда и умер один диск в пуле с резервированием, то его можно легко заменить. Процедура аналогична замене диска в RAID-массиве.

Вот пример из жизни когда в zfs-RAID10 массиве сломался один диск:

Здесь видим, что sdf приказал долго жить и требует замены. В данном случае - это железный сервер и пул построен на целых дисках. Находим нужный диск в железном сервере, и “на горячую” меняем старый диск на новый, такого же размера. В dmesg можно увидеть как определяется новый диск. В моем примере, я вынул /dev/sdf из сервера, вставил новый диск, и он определился в системе с таким же именем.

Теперь меняем диск в пуле. Мы говорим заменить диск, который именовался в пуле как sdf на диск, который в системе именуется /dev/sdf (так же как и старый):

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

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

Первое, что пропущено в инструкции и никак не рассматривается, это то что ZFS не очень хорошо работает с аппаратными RAID массивами, в частности это связано с Write cache, что понятно: файловая система ZFS — журналируемая и требует полного контроля над операциями записи. Так же при использовании готового аппаратного RAID массива теряются возможности ZFS в части Cache, Spare и прочего. Поэтому, все диски требуется перевести в HBA Mode, а при невозможности оного — сделать для каждого диска сделать отдельный RAID и отключить Write Cache контроллера.

Так же, при использовании агрегации сетевых портов можно их отключить на этапе установки, что бы её не усложнять (все дальнейшие операции я произвожу без bonding).

1. Подготовка среды установки

1.1. LiveCD

Как было сказано ранее, к сожалению, еще нет готового установщика Ubuntu с использованием root on ZFS, поэтому установка осуществляется с помощью LiveCD диска:

При этом я с коллегами пробовал использовать различные образы дисков так как не очень хотелось использовать графическую оболочку, но это ни к чему хорошему не привело.

Загружаемся с LiveCD, выбираем Try Ubuntu и открываем терминал (Ctrl+Alt+T).

1.2. Обновляем и устанавливаем репозитории

Вот тут нас ждет первый облом если сетевые настройки сервера не определяются DHCP. Обновление репозиториев работать не будет, поэтому настроим сеть.

Смотрим сетевые интерфейсы и находим тот через который будем соединятся:

Настраиваем сетевой интерфейс:

1.3. SSH сервер (опционально)

Для удобства установки можно поднять OpenSSH сервер и все дальнейшие операции производить через SSH клиент

Задаем пароль для пользователя ubuntu:

Это важно! Так как иначе доступ по ssh будет осуществляться без пароля с правами sudo. При этом нельзя устанавливать простой пароль.

Устанавливаем и запускаем OpenSSH:

И в терминале рабочей станции:

1.4. Становимся root

1.5. Устанавливаем поддержку ZFS в среде LiveCD

2. Разметка и форматирование жестких дисков

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

Обычно на серверах количество дисков такое:

1 диск не рассматриваем ибо это вообще аномалия.

2.0.1. 2 диска

Тут все просто, один массив MIRROR (RAID1). Если есть еще один третий диск, то можно его поставить в горячий резерв (SPARE) либо собрать RAIDZ массив (RAID5). Но 3 диска в сервере, очень большая редкость.

2.0.2. 4 диска

Если все диски у нас одинаковы, вариантов тут всего три (четвертый RAID0 я в принципе не рассматриваю):

  • MIRROR + MIRROR — аналог RAID10 точнее RAID01, так как в ZFS это mirror + mirror. 50% доступного дискового пространства;
  • RAIDZ — аналог RAID5. 75% доступного дискового пространства;
  • RAIDZ2 — аналог RAID6. 50% доступного дискового пространства;

На практике я использую MIRROR + MIRROR массив, при этом очевидно, что наиболее выгоден RAIDZ массив, так как предоставляет большее дисковое пространство, но есть нюансы

В части отказоустойчивости массивы располагаются в таком порядке (от лучшего к худшему):

  • RAIDZ2 — могут быть утеряны два диска, без потери данных;
  • MIRROR + MIRROR — может быть утерян один диск без потери данных, и с 66% вероятностью может быть потерян второй диск без потери данных;
  • RAIDZ — может быть потерян только один диск без потери данных;

В части скорости работы массивы располагаются в таком порядке:

  • MIRROR + MIRROR — как в части записи так и в части чтения;
  • RAIDZ — в части записи медленнее, так как кроме записи требуется рассчитать контрольную сумму;
  • RAIDZ2 — в части записи еще медленней так как требует расчета более сложных контрольных сумм;

В части скорости работы массива при деградации одного диска:

  • MIRROR + MIRROR — при выпадении одного диска по сути теряется только параллельное чтение с одного зеркала, второе зеркало работает без деградации производительности;
  • RAIDZ2 — деградация по снижению производительности выше так как требует обратного перерасчета блока из контрольной суммы для 1/4 данных + поиск блока;
  • RAIDZ — деградация сильно больше, так как требует обратного перерасчета блока из контрольной суммы для 1/3 данных + поиск блока;

Сравнение характеристик субъективное, но достаточно отражает мой выбор как золотую середину.

При этом надо понимать, что “медленней” и “еще медленней” — это не в разы, а всего на 10-20 % в худшем случае, поэтому, если у вас не оптимизирована база или приложение для работы с дисками, то падение скорости вы в принципе не заметите. Фактор скорости записи следует учитывать только тогда, когда вам действительно это нужно.

2.0.2. Много дисков

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

  • 2 SSD диска — делаем зеркало и как основной загрузочный массив с операционной системой и ZFS кешом для второго дискового массива;
  • Остальное забиваем SATA или SAS дисками и без разметки собираем ZFS дисковый массив;

Это равно же относится и к 4-х дисковым серверам если мы хотим получить достаточно универсальную платформу;

В случае если диски все одинаковы, и выделить два диска под отдельный массив бессмысленно (например 6 дисков по 8 Tb), то можно сделать загрузочными диски первой группы массива. То есть если вы собираетесь делать массив как: MIRROR + MIRROR + MIRROR или RAIDZ + RAIDZ, то загрузочный сектор размечаем только для первой группы. В принципе, можно разметить вообще только один диск даже для MIRROR и RAIDZ, а остальное подставить в “сыром” виде, ZFS сделает массив по меньшему элементу сам, но в таком случае, при сбое первого диска, вы теряете единственный загрузочный диск, поэтому не стоит так делать.

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

Приветствую уважаемых посетителей и подписчиков моего сайта. Я хочу рассказать о том, как установить Ubuntu Server 18 на сервер, рассмотрев отдельно разбивку диска и установку на raid. Рассказ я подкреплю своими комментариями и примерами, а в конце покажу подробное видео всего процесса.

Цели статьи

  1. Кратко рассказать об Ubuntu Server.
  2. Показать, как сделать загрузочную флешку.
  3. Подробно описать все этапы установки Ubuntu на сервер.
  4. Объяснить, как выбрать разметку диска.
  5. Выполнить установку ubuntu server на программный raid на тех серверах, где нет аппаратного raid контроллера. Показать, что делать при поломке диска, выполнив его замену.

Введение

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

Инструкция по установке ubuntu на raid будет актуальна не только для серверов. Если вам нужна система, устойчивая к отказу жесткого диска, рекомендую настраивать рейд и на обычных компьютерах и ноутбуках. Вам всего-то нужно два жестких диска, можно ssd, и вы можете не беспокоиться о выходе из строя одного из них. Я обычно использую в работе ноутбуки с двумя жесткими дисками. Это очень кстати для создания программного рейда. Мне не приходится переживать о поломке одного из хардов.

Системные требования

Прежде чем приступать к установке ubuntu, рассмотрим системные требования. Нужно понимать, что это очень условные показатели, так как требования к железу напрямую зависят от того, какой функционал будет работать на сервере. Вряд ли вам понадобится голая система. Так что перечисленные характеристики оборудования будут относиться к голой системе, позволяя понять, можно ли в принципе на него установить ubuntu server.

Системные требования Ubuntu Server 18
Тип установки Архитектура Процессор Память Диск
Standart Intel x86, AMD64, ARM 1 GHz 512 MB 1.75 GB
Minimal Intel x86, AMD64, ARM 300 MHz 256 MB 1.4 GB

Я рекомендую использовать виртуальную машину с 1 CPU и 1 Gb оперативной памяти, 10 Gb диск. Этого в общем случае хватит для небольшого web сервера. Если же вам нужен более простой функционал, например, openvpn сервер для личного пользования, то хватит и 512 мб памяти.

Где скачать

Если вдруг вам понадобятся старые версии Убунты, которые уже не поддерживаются, то можно воспользоваться разделом old-releases официального сайта. Там можно скачать все когда-либо выпущенные релизы Ubuntu. В обычных репозиториях их скорее всего не будет.

Будем считать, что вы выполнили загрузку iso образа ubuntu-18.04.3-live-server-amd64.iso дистрибутива Ubuntu Server 18. Двигаемся дальше и подготовим загрузочную флешку для установки.

Загрузочная флешка Ubuntu

Если вы собираетесь устанавливать ubuntu server на железо, вам понадобится загрузочная флешка ubuntu. Раньше можно было воспользоваться загрузочным диском, но сейчас не вижу смысла держать даже usb-cdrom, не говоря уже об обычных сидюках, которые в сервера давно не устанавливают. Гораздо проще воспользоваться live usb и установить систему с флешки.

Если у вас операционная система Windows, то для записи iso образа на флешку можно воспользоваться программой Rufus. Она легко гуглится и загружается. Запускаете программу, выбираете флешку, iso образ и жмете записать.

Дальше расскажу, как сделать загрузочную флешку, если у вас система Linux. В Ubuntu можно воспользоваться программой Startup Disk Creator, которая идет в комплекте с системой. Как ей пользоваться подробно рассказано на официальном сайте с tutorials. В общем случае, на любой linux системе сделать загрузочную флешку с ubuntu можно с помощью утилиты dd.

В данном примере устройство /dev/sdb это флешка. По созданию загрузочной флешки с убунтой все, переходим к непосредственно установке.

Установка Ubuntu 18

В своем примере я расскажу, как установить систему на ssd диск. Установщик Ubuntu 18 Server встречает нас стандартным приветствием, где надо выбрать Install Ubuntu Server.

При этом, прежде чем установить ubuntu, вы можете проверить оперативную память сервера, либо загрузиться с локального диска. В ubuntu 18 обновился консольный установщик и мне он откровенно нравится. Все четко, понятно и по делу. Интерфейс не тормозит. После старта установки нам предлагают выбрать язык будущей системы. Я всегда по-умолчанию выбираю английский. Потом можно добавить любые другие языки, если понадобятся.

Далее следует настройка сети. Если у вас есть dhcp сервер, то настраивать ничего не надо, ip адрес будет получен автоматически и можно сразу продолжать установку. Если же вам надо вручную ввести сетевые параметры, то сделать это можно, выбрав сетевой интерфейс и раскрыв его настройки.

Следующим шагом вам предложат указать адрес proxy сервера. Если вы его используете, вводите адрес, если нет, то оставляйте поле пустым. Потом вам предложат ввести адрес зеркала, из которого будут загружаться пакеты и обновления. В общем случае, можно оставить дефолтный адрес.

Перемещаемся в самый интересный раздел, где нужно выбрать разметку диска.

Разметка диска

Именно на это надо в первую очередь обращать внимание. Сейчас в основном все сервера устанавливаются на виртуальные машины, а там моменты с выбором разметки не так важны, так как ее можно относительно свободно менять. Хотя я и не рекомендую это делать без крайней необходимости. Лучше разметку и использование диска спланировать заранее.

Далее выбираете свой диск и видите автоматическую разметку, которую предложил установщик ubuntu server для ssd диска в 10 Gb.

Считаю ее не очень удачной. В данном случае у нас диск разбит следующим образом:

Я предлагаю это свободное место сразу отдать под корень. Для этого надо выделить устройство ubuntu-lv и изменить его размер. Приводим итоговую разметку к следующему виду.

Соглашайтесь с такой разметкой диска и продолжайте установку ubuntu server 18. Далее вам нужно будет указать логин и пароль вашей учетной записи. Так как по-умолчанию в ubuntu не создается учетная запись root, заходить на сервер после установки вы будете под своей учетной записью.

Дальше вам будет предложено установить OpenSSH server. Он нужен для того, чтобы подключаться к серверу по ssh. Я не представляю себе сервера, где бы это было не нужно, так что выбираем Install OpenSSH server.

Тут же вы можете импортировать ssh ключ и запретить авторизацию по паролю. Я не вижу смысла делать это сейчас. Гораздо удобнее будет потом подключиться к серверу и настроить все, как надо. Первый раз можно будет зайти и по паролю.

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

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

Установка Ubuntu Server на raid

Отдельно рассмотрю установку Ubuntu Server на программный рейд mdadm. Этот процесс ничем не отличается от стандартной установки, кроме выбора разметки диска. Там мы должны будем создать разделы mdadm и установить систему на них. Давайте сделаем это.

В моем примере я буду использовать 2 виртуальных жестких диска по 10 Gb каждый. Для примера этого достаточно. Для дисков большего размера все действия будут аналогичные. Логика разметки диска под установку на raid mdadm следующая:

Должно получиться примерно так:

Дальше продолжаем стандартную установку. После того, как она завершится, логинимся на сервер и проверяем статус raid массива.

Все в порядке, система установлена на raid. Выполним несколько шагов для завершения работы.

  1. Зайдите в систему и подключите swap раздел.
  2. Установите загрузчик на оба диска.
  3. Протестируем поломку жесткого диска.

Думаю, с созданием swap вопросов быть не должно. В интернете материалов на эту тему масса. Установим GRUB2 на оба диска, чтобы в случае поломки одного из них, сервер мог загрузиться и продолжать работу. Для этого выполняем команду:

Выскочат пару запросов на указание параметров загрузчика. Можно все оставить как предложено. В конце указывайте оба диска, если выбраны не оба. По идее, установщик ubuntu server сразу ставит загрузчик на оба диска, но я на всякий случай всегда перепроверяю.

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

Проверяем состояние рейда mdadm.

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

Загружаем Ubuntu Server и проверяем список дисков.

Появился чистый диск /dev/sda . Нам нужно на него скопировать все разделы 1 в 1, как на старом диске и добавить его в состав массива mdadm. Делаем это.

Проверяем структуру разделов.

Разделы идентичные на обоих дисках. Теперь добавляем разделы диска sda в массивы mdadm.

Проверяем статус рейда.

Разделы подключены, идет ребилд массива. После того, как он закончится, можно проверять работу сервера, перезагрузив его. Но перед этим надо не забыть установить загрузчик на вновь добавленный диск. Для этого выполните команду и убедитесь, что загрузчик установлен на оба диска.

После этого перезагружайте сервер и проверяйте. Все должно быть в порядке. Мы корректно выполнили замену сломавшегося диска в ubuntu server, минимизировав простой. Нам, по сути, понадобился только один reboot на все работы. В остальное время сервер был полностью работоспособен и доступен.

Видео

Для того, чтобы вы убедились в корректности и работоспособности представленного материала, предлагаю посмотреть видео про установку Ubuntu Server 18 на raid mdadm своими глазами. Если у кого-то что-то не получается, посмотрите, как это делал я.

Заключение

На этом моя статья по установке на сервер и проверке Ubuntu Server 18 закончена. Надеюсь, вам было полезно и понятно. Буду рад замечаниям и дополнениям в комментариях.

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

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

Что такое ZFS?

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

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

Установка ZFS

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

sudo apt install -y zfs

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


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

sudo modprobe zfs

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

Команда zpool

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

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

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

Это были все основные опции команды, которые мы будем использовать. Теперь рассмотрим примеры настройки 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

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


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

Чтобы размонтировать файловую систему для одного из созданных разделов используйте команду 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 destory pool0/files@shot1

Выводы

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

Читайте также: