Был один сервер и на нём, в зеркальном пуле вывалился один из дисков. В момент замены и процесса перестроения вылетает второй диск. Немного не штатная ситуация, но я дождался окончания перестроения, удалил файлы, на которые ругался пул, сделал ему 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.