ZFS: Чиним загрузчик FreeBSD после обновления
Если вы используете ZFS как основную файловую систему и при обновлении с 12
до 13
версии сервер перестал грузиться, то под катом можно найти инструкцию по восстановлению работоспособности системы.
О проблеме
Было самое обычное утро и ничего не предвещало беды. Однако, уже несколько недель FreeBSD на стареньком HP ProLiant G7 MicroServer настойчиво требовала обновиться до 13 версии.
Эта машина уже пережила несколько апгрейдов. И в этот раз без особых проблем с помощью freebsd-update
я установил все обновления.
Но этой истории не было бы, если бы не zpool status
с предупреждением об устаревшей версии ZFS:
status: The pool is formatted using an older on-disk format. The pool can
still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'. Once this is done, the
pool will no longer be accessible on older software versions.
Выполнения zpool upgrade -v
прошло штатно и ничего не предвещало беды. На всякий случай я перезагрузил машину и получил забавное сообщение:
/boot/config: @
FreeBSD/x86 boot
Default: zroot/ROOT/default: @
boot:
|
Can't find @
Загрузка остановилась на stage 2. А неопознанный символ @
намекает на проблемы с загрузочной записью/конфигом.
Решение
Сперва нам понадобится Live USB, образ можно скачать по ссылке, а записать с помощью команды:
dd if=FreeBSD-13.0-RELEASE-amd64.iso of=/dev/sda bs=1M status=progress
Алгоритм починки:
- Загрузиться с Live USB
- Войти под root (пароль пустой)
- Создать альтернативную точку монтирования для нашего zfs пула
mkdir /tmp/root
- Импортировать
zroot pool
в/tmp/root
zroot import -fR /tmp/root zroot
- Смонтировать
zroot/ROOT/default
. Данный раздел содержит/boot
zfs mount zroot/ROOT/default
- Переписать загрузчик
gpart bootcode -b /tmp/root/boot/pmbr -p /tmp/root/boot/gptzfsboot -i 1 ada0
- Экспортировать zpool
cd / zpool export zroot
- Перезагружаем машину, не забывая убрать USB.
Заключение
Задача простая, но учитывая, что по FreeBSD информации не очень много (особенно в рунете), надеюсь материал окажется полезным и сохранит ваше время.