Linux zfs on root

Ubuntu 18.04 Root on ZFS

В прошлом году потребовалось мне создать инструкцию по установке операционной системы 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. Обновляем и устанавливаем репозитории

sudo apt-add-repository universe sudo apt update 

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

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

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

sudo echo "auto >" >> /etc/network/interfaces sudo echo "iface > inet static" >> /etc/network/interfaces sudo echo " address >" >> /etc/network/interfaces sudo echo " netmask >" >> /etc/network/interfaces sudo echo " gateway >" >> /etc/network/interfaces sudo service networking restart 
sudo echo 'nameserver 8.8.8.8' >> /etc/resolv.conf

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

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

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

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

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

sudo apt install openssh-server sudo service ssh start

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

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

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

apt install --yes debootstrap gdisk zfs-initramfs

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% доступного дискового пространства;
Читайте также:  Linux проверить количество ядер

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

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

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

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

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

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

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

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

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

Читайте также:  Make headers linux kernel

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 правильный диск с которого загружаться.

2.1. Подготовка к разметке и очистка диска

Для разметки диска используется пакет mdadm, ставим его:

Смотрим, какие диски у нас в наличии:

Источник

Оцените статью
Adblock
detector