[solaris] История о слетевшем загрузчике

Был один сервер и на нём, в зеркальном пуле вывалился один из дисков. В момент замены и процесса перестроения вылетает второй диск. Немного не штатная ситуация, но я дождался окончания перестроения, удалил файлы, на которые ругался пул, сделал ему scrub, ошибки с диска пропали, но пул всё равно в состоянии degraded (так как диск второй вылетел). Выключаю сервер, меняю диск и тут на тебе: не грузится (не найдет загрузочный диск).

Гружусь с LiveCD, импортирую пул и ставлю на него загрузчик:

root@solaris:/# bootadm install-bootloader -P rpool
bootadm: GRUB2 installation failed
root@solaris:/# bootadm install-bootloader -f -P rpool
bootadm: GRUB2 installation failed
root@solaris:/# bootadm install-bootloader -f -P rpool c3t0d0
bootadm: Device node is not a slice: /dev/rdsk/c3t0d0
root@solaris:/# bootadm install-bootloader -f -P rpool c3t0d0s0
bootadm: GRUB2 installation failed

Попробовал через fdisk прописать label — не помогло. Посколько хотелось спасти данные, то решено было поставить ОС на второй диски и с него уже перенести данные (как оказалось позже, можно было этого не делать, а скопировать label через prtvtoc с любого рабочего загрузочного диска). После установки, zpool import не видит старый пул. Пробую посмотреть удалённые пулы и … вижу его. Состояние, правда, странное: ONLINE (DESTROYED).

root@solaris:/# zpool import -D
  pool: rpool
    id: 241361632505110857
 state: ONLINE (DESTROYED)
action: The pool can be imported using its name or numeric identifier.
config:

        rpool     ONLINE
          c3t0d0  ONLINE

Делаю import:

root@solaris:/# zpool import -D -o readonly=on 241361632505110857 old
cannot import 'rpool': pool may be in use from other system,
it was last accessed by solaris (hostid: 0x4bad1c) on Thu Mar 22 15:47:07 2018
: pool may already be in use


root@solaris:/# zpool import -D -f -o readonly=on -R /a 241361632505110857 old

После export’a он стал опять нормальным и видится через простой zpool import. Только после этого ко мне пришла в голову идея, сравнить label’ы на обоих диска и… они отличались!!!

root@solaris:/# prtvtoc /dev/rdsk/c3t0d0s2
* /dev/rdsk/c3t0d0s2 partition map
*
* Dimensions:   
*     512 bytes/sector
* 976773168 sectors
* 976773101 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     12    00        256    524288    524543
       1      4    00     524544 976232207 976756750
       8     11    00  976756751     16384 976773134
root@solaris:/# prtvtoc /dev/rdsk/c3t1d0s2
* /dev/rdsk/c3t1d0s2 partition map
*
* Dimensions:   
*     512 bytes/sector
* 976773168 sectors
* 976773101 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 976232207 976756750
       8     11    00  976756751     16384 976773134

Отличались tag’ом в первом разделе (правильный tag=24!!!). Что конкретно они означают, я так и не нашёл, так как официальная документация говорит, что tag’и есть только до 0xb, что явно меньше, чем 24 или 12 (даже переведя в hex).
После переноса метки со свежеустановленной ОС на

root@solaris:/# prtvtoc /dev/rdsk/c3t1d0s2 | fmthard -s - /dev/rdsk/c3t0d0s2

пробую ещё раз поставить загрузчик на пул old, то есть на c3t0d0:

root@solaris:/# bootadm install-bootloader -P old

и он поставился без ругани. После перезагрузки всё загрузилось. Но кое-что мне не нравится — корневой пул теперь называется old. Задача похоже, что решается достаточно просто: загрузится с LiveCD, сделать import/export с именем rpool и всё. Но, после перезагрузки получаем ошибку, о том, что не найден пул с ID … Вспоминаем, что бы мы ставили загрузчик на пул old, собственно теперь нужно загрузиться опять с LiveCD и поставить ещё раз загрузчик на пул rpool.

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

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