Назад | Перейти на главную страницу

FreeBSD 10 не загружается в корень ZFS после сбоя питания

Устанавливая сегодня новое оборудование, я невольно отключил питание одного из наших серверов. Этот сервер работает под управлением FreeBSD 10 с Root-on-ZFS, как предлагает установщик. Всего в нем 36 дисков, распределенных на два RAID-Z2, которые принадлежат одному пулу (называемому zroot).

После повторного включения сервера он больше не загружается. Перед появлением меню загрузки печатаются следующие сообщения:

Loading /boot/defaults/loader.conf ZFS: i/o error - all block copies unavailable Warning: error reading file /boot/loader.conf

Несмотря на эти сообщения, система продолжает загружать ядро, пока не остановится на mountfrom> подсказка, и я не могу продолжить с этого момента. Если я войду zfs:zroot/ROOT/default, это просто говорит unknown filesystem.

Однако я могу загрузиться с USB-накопителя, импортировать zpool и прочитать оба /boot/defaults/loader.conf и /boot/loader.conf. На самом деле, похоже, что zpool в полном порядке.

Затем я попытался переустановить загрузочный код:

gpart bootcode -b /tmp/zroot/boot/pmbr -p /boot/gptzfsboot -i 1 da0

Я попытался воссоздать файл кеша zpool:

zpool set cachefile=/tmp/zroot/boot/zfs/zpool.cache zroot

Я попытался вручную указать загрузчику загрузить модуль ZFS.

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

Редактировать:

Выход zpool list:

$ zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
zroot  97.8T  28.0T  69.7T    28%  1.33x  ONLINE  /tmp/zfs

В настоящее время система загружается с USB-накопителя, поэтому мне не удалось импортировать пул в /

Содержание /boot/loader.conf:

$ cat /boot/loader.conf
zfs_load="YES"
ipmi_load="YES"

Изменить 2:

$ zpool status
  pool: zroot
 state: ONLINE
  scan:
config:

    NAME                                            STATE     READ WRITE CKSUM
    zroot                                           ONLINE       0     0     0
      raidz2-0                                      ONLINE       0     0     0
        gptid/f8c57b3a-083e-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/f97b7e8b-083e-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/fa3c41d9-083e-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/faf62101-083e-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/fbb19e1b-083e-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/fc6b75db-083e-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/fd26cd36-083e-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/fddb4b8e-083e-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/fe9a55f6-083e-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/ff582110-083e-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/001713d1-083f-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/00d90b6c-083f-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/0192be91-083f-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/023ea058-083f-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/02fb8ee4-083f-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/03ab78ec-083f-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/04632542-083f-11e4-b11b-002590e745f4  ONLINE       0     0     0
        gptid/052144fd-083f-11e4-b11b-002590e745f4  ONLINE       0     0     0
      raidz2-1                                      ONLINE       0     0     0
        da18                                        ONLINE       0     0     0
        da19                                        ONLINE       0     0     0
        da20                                        ONLINE       0     0     0
        da21                                        ONLINE       0     0     0
        da22                                        ONLINE       0     0     0
        da23                                        ONLINE       0     0     0
        da24                                        ONLINE       0     0     0
        da25                                        ONLINE       0     0     0
        da26                                        ONLINE       0     0     0
        da27                                        ONLINE       0     0     0
        da28                                        ONLINE       0     0     0
        da29                                        ONLINE       0     0     0
        da30                                        ONLINE       0     0     0
        da31                                        ONLINE       0     0     0
        da32                                        ONLINE       0     0     0
        da33                                        ONLINE       0     0     0
        da34                                        ONLINE       0     0     0
        da35                                        ONLINE       0     0     0

errors: No known data errors

Хорошо, неважно, что я сказал в своем другом ответе. Вы не сможете загрузиться в однопользовательском режиме, если у вас все равно возникнут проблемы с разделами ZFS. Забавно то, что после того, как я опубликовал свой ответ, у меня снова возникла проблема с питанием, и я не мог загрузиться в свою систему, как и ваша проблема.

Итак, вот что я сделал, чтобы вернуться.

Я использовал FreeBSD 10.0-RELEASE Live CD (это был bootonly Думаю - минимизировать загрузку)

  1. Загрузитесь с компакт-диска и выберите «Live CD» из вариантов. (войдите как root)
  2. Выполните следующие команды, чтобы присоединить разделы с помощью geli; вам нужно будет ввести свою парольную фразу, если у вас настроено полное шифрование диска ZFS с root-доступом

     mkdir /tmp/bootpool
     zpool import -f bootpool
     zfs set mountpoint=/tmp/bootpool bootpool
     zfs mount -a
     cp /tmp/bootpool/boot/encryption.key /tmp/
     zfs umount -a
     zfs set mountpoint=/bootpool bootpool
     zpool export bootpool
     geli attach -k /tmp/encryption.key /dev/ada0p4
     zpool import -f -R /mnt zroot
    

Мне пришлось zpool import с участием -f флаг, потому что проблема с отключением питания не export перегородка в правильном направлении.

После выполнения этих команд я перезагрузился, и система снова вышла в онлайн.

Хотя у меня была еще одна проблема с bootpool некорректно загружается после загрузки.

В /boot папка была пуста, это также была символическая ссылка на /bootpool/boot каталог. Я также обнаружил, что при импорте раздела загрузочного пула zfs он создал /bootpool/boot/boot так что проблема была в 2 boot папки под /bootpool.

Итак, я сделал это после reboot чтобы загрузить пул загрузки вручную.

      zpool export bootpool
      zpool import -f bootpool
      (cd to root and remove the old symbolic link `boot`)
      cd /
      rm boot
      (notice the double `boot` directory issue)
      ln -sf bootpool/boot/boot/

Вот и все, и символическая ссылка / boot снова заработала, и я мог загрузить недостающие модули ядра, например kldload linux или что-нибудь еще.

Надеюсь, что это поможет, и если кто-нибудь знает чистое решение проблемы с загрузочным пулом выше, поделитесь им со мной.

Спасибо,

Драко

Ссылки:

Вы пробовали загрузиться в однопользовательском режиме и принудительно смонтировать разделы ZFS?

# zfs mount -a

У меня произошел сбой питания на моей FreeBSD 10 (которая также является Root-on-ZFS), и мне удалось заставить ее загрузиться с помощью приведенной выше команды.

Дай мне знать, как дела.