Если так случилось, что ваш 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 можно прочесть здесь