- Ubuntu 18.04 Root on ZFS
- 1. Подготовка среды установки
- 1.1. LiveCD
- 1.2. Обновляем и устанавливаем репозитории
- 1.3. SSH сервер (опционально)
- 1.4. Становимся root
- 1.5. Устанавливаем поддержку ZFS в среде LiveCD
- 2. Разметка и форматирование жестких дисков
- 2.0.1. 2 диска
- 2.0.2. 4 диска
- 2.0.2. Много дисков
- 2.1. Подготовка к разметке и очистка диска
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% доступного дискового пространства;
На практике я использую 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 правильный диск с которого загружаться.
2.1. Подготовка к разметке и очистка диска
Для разметки диска используется пакет mdadm, ставим его:
Смотрим, какие диски у нас в наличии: