Если так случилось, что ваш grub перестал грузить Solaris, то эта статья для вас. Скажу сразу, что бывает 2 режима: rescue и normal. Если вам не повезло и вас выбрасывает в rescue (об этом сообщает приглашение grub rescue>), то нужно с него загрузится в normal и потом уже грузить ОС. Отличие rescue от normal’a – значительны: в rescue доступны лишь 4 команды (ls, set, unset, insmod). Если у вас режим normal, то можете пропустить этот абзац.
Итак, ищем ваши загрузочные устройства:
grub rescue> ls (hd0) (hd0,gpt9) (hd0,gpt2) (hd0,gpt1) (hd1)
Очевидно, что ОС стоит на hd0. И так, gpt1 – содержит собственно загрузчик, gpt2 – всё остальное, включая ОС, gpt9 – reserved. Эти же разделы вы можете получить через команду prtvtoc (но нумерация разделов уже с 0-ля, то есть сдвинута на единицу):
# prtvtoc /dev/rdsk/c7t0d1 * /dev/rdsk/c7t0d1 partition map * * Dimensions: * 512 bytes/sector * 585937500 sectors * 585937433 accessible sectors * * Flags: * 1: unmountable * 10: read-only * * Unallocated space: * First Sector Last * Sector Count Sector * 34 222 255 * * First Sector Last * Partition Tag Flags Sector Count Sector Mount Directory 0 24 00 256 524288 524543 1 4 00 524544 585396539 585921082 8 11 00 585921083 16384 585937466
Теперь ищем модуль normal.mod для загрузки в normal режим grub’a на разделе с ОС – gpt2, то есть команда должна найти файл
grub rescue> ls (hd0,gpt2)/ROOT/11.4.25.75.3/@/boot/grub/i386-pc/ ... normal.mod ...
При этом работает табуляция. В данном случае, у нас установлена ОС Oracle Solaris 11.4 и SRU 25 и Boot Enviroment называется просто – 11.4.25.75.3
Если файл найден, то прописываем prefix (ибо по умолчанию он prefix=(hd0,gpt2)//@/boot/grub/i386-pc):
grub rescue> set prefix=(hd0,gpt2)/ROOT/11.4.25.75.3/@/boot/grub/i386-pc
Так же вы можете посмотреть установленные переменные, просто выполнив команду set:
grub rescue> set prefix=(hd0,gpt2)/ROOT/11.4.25.75.3/@/boot/grub/i386-pc root=hd0,gpt2
После этого грузим normal grub:
grub rescue> insmod normal grub rescue> normal GNU GRUB version 1.99,11.4.25.0.1.75.3 Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists possible device or file completions. grub>
Подгружаем модуль для работы с zfs:
grub> insmod zfs
Указываем, где искать загрузчик:
grub> zfs-bootfs /ROOT/11.4.25.75.3/@/ zfs-bootfs
Определяем путь к ядру относительно корня ФС:
grub> set kern=/platform/i86pc/kernel/amd64/unix
Определяем то, что наше ядро является multiboot (ещё бывают chain-loader, как Linux, например) и параметры к нему (обратите внимание, что у zfs_bootfs именно символ нижнего подчёркивания):
grub> $multiboot /ROOT/11.4.25.75.3/@/$kern $kern -B $zfs_bootfs 0%...done
Подгружаем модуль сжатия gzio и указываем путь к boot archive:
grub> insmod gzio grub> $module /ROOT/11.4.25.75.3/@/platform/i86pc/amd64/boot_archive 0%...54%...done
И заключительная команда boot, которая начнёт грузить ОС
grub> boot
Подробнее о grub’e можно прочесть здесь