среда, 7 июля 2010 г.

Чтобы помнить, часть 2 (что делать, если FreeBSD установленна на ZFS и мы нечаянно обновили ZFS с v13 на v14)

Предисловие

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

Сабж

Добрый день!
ZFS — дивная файловая система, базаров нема. Однако с болванки с релизом 8.0 мы можем поставить только ее версию 13, далее после cvsup-а исходников и сборки и установки мира мы обнаруживаем возможность подачей команды zpool upgrade проапгрейдить ФС до версии 14, чем радостно пользуемся. А потом наступает время перезагрузится, и если корень у нас тоже на ZFS, а загрузчик — в GPART-разделе, мы обнаруживаем следующее сообщение:
ZFS: unsupported ZFS version 14 (should be 13).

Лично я в этом момент испытал неиллюзорное желание начать срать кирпичами, но преодолел себя и полез в гугель. Итак, вот что надо сделать:
  1. Скачать вот отсюда образ:
    http://mfsbsd.vx.sk/
    и нарезать болванку. Ценность данной болванки в том, что в нее уже заинтегрирована 14-я версия ZFS, то есть она будет актульна минимум до появления 8.1-что угодно.iso
  2. Загрузится с нее, пароль рута - mfsroot
  3. Командой gpart show посмотреть, какие диски в пуле, где находится загрузчик. например у меня было:
    gpart show
    => 34 625140268 ad10 GPT (298G)
    34 128 1 freebsd-boot (64K)
    162 8388608 2 freebsd-swap (4.0G)
    8388770 616751532 3 freebsd-zfs (294G)

    => 34 976773101 ad12 GPT (466G)
    34 16777216 1 freebsd-swap (8.0G)
    16777250 959995885 2 freebsd-zfs (458G)

    То есть в массиве два диска, ad10 и ad12, ебучий загрузчик не той версии живет в первом разделе ad10.
  4. Монтируем все
    zpool import имя_пула

    Если вы забыли имя пула — вы в жопе!!!! Лично я не знаю (пока) способа его посмотреть в этой ситуации
    zfs mount -a

    Будет смонтировано содержимое пула, причем в корень, с перекрытием имеющейся ФС. «Всем похуй» ©

  5. Апгрейдим загрузчик
    gpart bootcode -p /boot/gptzfsboot -i 1 adN

    где adN - правильное название устройства из пункта 3, где находится загрузчик. В моем случае это было ad10. С удовольствием наблюдал истерику, когда какой-то неведомый дятел тупо копировал строку из примера (где было ad4), не смотря на то, что вывод его gpart-а давал ad0
    6. Завершаем спасательную операцию.
    cd /
    umount -a
    reboot

После перезагрузки у нас все хорошо и пристойно.Видимо, данной ситуации можно избежать, если сразу после выполнения апгрейда ФС выполнить пункт 5 данного меморандума.
© kest

1 коммент.:

r-rus комментирует...

По пункту 4.
если сказать системе zpool import без параметров, то она выдаст все несмонтированные пулы и их имена, соответственно.