Устанавливая сегодня новое оборудование, я невольно отключил питание одного из наших серверов. Этот сервер работает под управлением 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
Думаю - минимизировать загрузку)
root
)Выполните следующие команды, чтобы присоединить разделы с помощью 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), и мне удалось заставить ее загрузиться с помощью приведенной выше команды.
Дай мне знать, как дела.