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