null

Замена диска rpool ZFS, Solaris 10

В общем-то, официальной документации довольно много. Только почему-то она не описывает _ПОЛНУЮ_ или хотя бы рабочую последовательность замены дисков в 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

На этом, пожалуй, всё.

korg

 

Коротко о себе

Работаю в компании Tune-IT, администрирую инфраструктуру компании и вычислительную сеть кафедры Вычислительной ТехникиСПбНИУ ИТМО.

Интересы: администрирование UNIX и UNIX-like систем и активного сетевого оборудования, написание shell- и perl-скриптов, изучение технологий глобальных сетей.
Люблю собирать GNU/Linux и FreeBSD, использовать тайлинговые оконные менеджеры и писать системный софт.

Similar content:

Сетевая загрузка Solaris 2.6 на SparcStation 5 с QEMU, эмулирующем SparcStation 5
Установка Solaris 2.6 в QEMU, эмулирующем SparcStation 5 с поддержкой сети
Запуск Solaris 2.6 в QEMU, эмулирующем SparcStation 5 с поддержкой сети
Oracle Solaris 11 System Administration for Experienced UNIX/Linux Administrators
Transition to Oracle Solaris 11
Oracle Solaris 11 ZFS Administration
Oracle Solaris Cluster 4.x Advanced Administration
Oracle Solaris 11 ZFS Administration
Oracle Solaris 11 Fault Analysis and Troubleshooting
Oracle Solaris 11 Advanced System Administration