[О блоге] [наверх] [пред] [2023-05-05 18:09:20+03:00] [0cfadc4b3f5ed39dba025a4aecf5cede864f9ad1]
Темы: [bsd]

Обновил FreeBSD на серверах

Делаю jail с голой FreeBSD 13.2 в отдельном ZFS dataset. Пересобираю всю
ОС в нём. mount_unionfs использую для монтирования /usr/ports/distfiles
в этот jail, чтобы он мог собирать пакеты без Интернета. Пакеты на
основной системе все были собраны, поэтому и distfile-ы имеются.
Использовать те же самые настройки для пакетов как на моей основной
системе не хочу, ибо на сервере мне не нужна документация для кучи из
них, которая занимает место. Собираю кучу пакетов общих для двух своих
серверов и общие настройки (всякие временные зоны, chrony, strongswan,
postfix). Делаю clone из этого data set. Теперь есть два chroot-а. В
одном продолжаю настраивать и устанавливать порты для одного сервера, а
в другом для оставшегося.

На USB флешку переношу файл с ZFS dataset-ом jail-а. С другой USB флешки
загружаюсь и переразбиваю диск, создаю ZFS pool и zfs recv на него
dataset-а с флешки. Перезагружаюсь и после нескольких итераций выясняю
что серверы почему-то могут загружаться с EFI разделов USB дисков, но на
обычных SATA они игнорируются. Делаю freebsd-boot раздел для gptzfsboot
разгрузчика, EFI раздел с /boot/loader.efi загрузчиком для UEFI систем,
swap-ом и оставшимся свободным местом для freebsd-zfs. Всё это
затрагиваю до самого большого раздела на терабайты с хранилищем файлов.
gptzfsboot тоже без проблем справляется с загрузкой с ZFS где zstd и
skein. Корень на этом сервере сзеркалирован, а вот разделы с данными
вообще в stripe и на GELI зашифрованных разделах. Их не трогаю -- пускай
остаются как есть. На втором диске проделываю все те же самые действия с
загрузчиками и добавляю ZFS корневой раздел в зеркало.

Но это сервер который не шибко критичен для постоянного online. Зато на
нём понял особенности загрузки с EFI на этих серверах. А вот с основным
больше геморроя. Гораздо больше программ и настроек. Перед вознёй с
jail-ами я делаю zfs send с сервера и zfs recv на мой основной компьютер
чтобы рядом под рукой иметь полностью его готовый образ, чтобы локально
удобно копировать настройки/state-ы и прочее. Теперь на SSD USB создаю
уже полноценную загрузочную систему. В самом конце останавливаю
почтовик, переношу его последнее состояние в dataset на флешке и
перезагружаю сервер, загружаясь с SSD USB, чтобы понять вообще работает
ли он (почта). Если не работал бы, то просто перезагрузился бы обратно с
дисков. Но всё оказалось более менее нормально. Система работает, на
лету по SSH чиню всякие мелки косяки, загружаю zfs recv-ом dataset с
одним jail-ом, который был сделан ещё на FreeBSD 11.2. Заработал без
проблем.

Но на этом основном сервере у меня небольшая часть места отведена под
корень, а терабайты под GELI раздел с хранилищем. И всё в зеркалах. И я
решил заменить этот GELI на родное ZFS шифрование, из-за удобства и
гибкости. Например раздел с NNCP spool-ом у меня ограничен квотой на
2GiB всего, ибо не раз кончалось место на корневом разделе. А tossing
при этом уже происходит на зашифрованный dataset. С родным ZFS
шифрованием можно не думать про место -- оно одно для всех. Плюс я хотел
перейти на AES-256 (GELI был на AES-128). В итоге полностью переразбиваю
один из дисков, теряя на нём данные, устанавливаю загрузчики, добавляю в
зеркало к SSD USB диску. Когда resilvering завершается, то загружаюсь с
этого HDD. Расширяю его место на все оставшиеся терабайты, подключаю
GELI диск с данными и переношу с него всё что там есть через zfs
send|recv, но не забывая указать encryption на целевом dataset-е. После
этого второй диск полностью переделываю и добавляю в зеркало.

В общем, прилично работы, куча времени на перенос терабайтов, но
минимальный downtime. Вот ни одной проблемы в ОС или баги не нашёл. Всё
как по маслу. Все косяки -- моих рук и от невнимательности.

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