Грузим Solaris из grub

Если так случилось, что ваш 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 — всё остальное, включая ОС, gpt9reserved. Эти же разделы вы можете получить через команду 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 -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 можно прочесть здесь

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *