В общем-то, официальной документации довольно много. Только почему-то она не описывает _ПОЛНУЮ_ или хотя бы рабочую последовательность замены дисков в Solaris-ных ZFS зеркалах, особенно, если пул является корневым. Поэтому, я кратко и с комментариями изложу рабочую, полную процедуру, с претензией на корректность.
Во-первых, необходимо определить заменяемый диск. В случае, если он уже вышел из строя, проблем не возникнет.
zpool status -xv
Доходчиво покажет, например, c1t0d0s0 DEGRADED.
Из этой информации видно, что нулевой слайс первого диска не читается. Обычно, рядом видна причина. В моём случае - "too many errors". Если же хочется заменить живой диск, первым делом его надо выключить. Делается это просто:
zpool offline rpool c1t0d0s0
После этого, устройство необходимо расконфигурировать из ОС. Посмотрим, какие есть устройства:
cfgadm -al
И теперь скомандуем диску: расконфигурируйся.
cfgadm -c unconfigure c3::c1t0d0s0
После этого, судя по мануалу, на Sun-овских серверах должен загореться "Ready to remove LED", который я видел пару раз в жизни, соответственно, не загорающийся. Чего в данной ситуации делать КАТЕГОРИЧЕСКИ НЕ надо, так это ещё-раз запускать ``cfgadm -al''. Иначе оно повиснет при выполнении системного вызова, процесс будет не убить, а если мы ещё случайно зашли в single-user, то вытекающие последствия очевидны. Впрочем, в лучшем случае, придётся просто подождать около пяти минут таймаута от подсистемы работы с блочными устройствам Solaris.
Теперь можно смело изымать диск. Следующий шаг, которого почему-то в доках я почти никогда не вижу, но который действительно нужен, чтобы имена дисков не съехали:
devfsadm -Cv
На этом шаге удалятся неиспользуемые ноды из devfs. И при втыкании нового диска, соответствнно, будет свободное место с именем c1t0d0, которое ему и отдастся. В противном случае, вы рискуете поиграть в игру "воткни меня заново".
Теперь проверим таблицу разделов на новом диске:
prtvtoc /dev/rdsk/c1t0d0s2
Обычно, она не совпадает со вторым диском, поэтому можно её скопировать с соседнего (например c1t1d0). Обратите внимание, что для этого тут тоже используется второй слайс:
prtvtoc /dev/rdsk/c1t1d0s2 | fmthard -s - /dev/rdsk/c1t0d0s2
В принципе, заключительным шагом является указание ZFS-у, что диск в пуле поменяли и надо бы resilver-нуть данные. Делается это просто:
zpool replace rpool c1t0d0s0
Но вот о чём забывает документация. Если производилась замена диска в корневом пуле, было бы неплохо записать на него загрузчик. Потому что если оба диска когда-нибудь выйдут из строя и загрузчика не окажется ни на одном из них, при ближайшей перезагрузке придётся играть в ещё одну игру: "загрузи Solaris по сети и запиши загрузочный сектор в метку". Поэтому на SPARC можно сказать ещё такую команду:
installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/c1t0d0s0
Для x86 команда существенно отличается
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1d0s0
На этом, пожалуй, всё.