В статье будем рассмотрен механизм замены дисков корневого пула на диски большей ёмкости. Данный метод подходит как для Solaris-family так и для FreeBSD.
1) Смотрим размер пула до изменения:
# zpool list NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT rpool 15.3G 12.5G 2.8G 78% 1.00x ONLINE - # zpool status pool: rpool state: ONLINE scan: resilvered 12.5G in 0h28m with 0 errors on Thu Nov 15 21:06:22 2012 config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 c3t0d0s0 ONLINE 0 0 0 errors: No known data errors
2) Форматируем новый диск
Новый диск у нас опознался как c3t2d0. Форматируем его Solaris2 100% (о том, как это делается, можно посмотреть здесь) Смотрим разметку нашего диска:
#prtvtoc /dev/c3t2d0s2 * /dev/dsk/c3t2d0s2 partition map * * Dimensions: * 512 bytes/sector * 63 sectors/track * 255 tracks/cylinder * 16065 sectors/cylinder * 5315 cylinders * 5313 accessible cylinders * * Flags: * 1: unmountable * 10: read-only * * First Sector Last * Partition Tag Flags Sector Count Sector Mount Directory 2 5 01 0 85353345 85353344 8 1 01 0 16065 16064
всё нормально, только нет места под загрузочный раздел. Если его сейчас добавить в пул и установить на него загрузчик – то загрузчик просто затрёт начальние сектора и пул окажется неконсистентным. Поэтому, нужно подготовить диск, а именно правильно указать загрузочную область. Для этого запишем вывод prtvtoc /dev/c3t2d0s2 в файл, отредактируем файл и запишем новую таблицу на диск.
#prtvtoc /dev/c3t2d0s2 > /tmp/c3t2d0s2.dsk
Добавим такую строку в файл /tmp/c3t2d0s2.dsk
0 2 00 16065 X Y
в итоге получаем такое:
... * Partition Tag Flags Sector Count Sector Mount Directory 0 2 00 16065 X Y 2 5 01 0 85353345 85353344 8 1 01 0 16065 16064 ...
Осталось вычислить значения X и Y. Вычисляем так:
X=85353345+32131 (то есть берём значение Count из строки с Partition=2)
Y=X-16064
После этого изменённый файл будет выглядеть так:
... * Partition Tag Flags Sector Count Sector Mount Directory 0 2 00 16065 85305150 85321214 2 5 01 0 85353345 85353344 8 1 01 0 16065 16064 ...
осталось записать новую таблицу на диск:
#cat /tmp/c3t2d0s2.dsk | fmthard -s - /dev/rdsk/c3t2d0s2
3) Работа с пулом
Теперь добавляем новый диск к существующему пулу, тем самым зеркалируем его:
#zpool attach -f rpool c3t0d0s0 c3t2d0s0
и запишем загрузчик:
#installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c3t2d0s0
Перед тем, как переходить к следующему пункту, загрузитесь с нового диска и если всё удачно, то переходите к следующему пункту
После окончания сихронизации пула, можно пойти несколькими путями:
– просто удалить старый диск из пула (zpool detach)
– разделить пул (zpool splitt)
Обязательно на этом этапе нужно выставить значение для пула autoexpand=on (по дефолту оно off):
#zpool set autoexpand=on
Если zpool list не показал сразу новый размер, можно перегрузится. Если после перезагрузки тоже размер не изменился, тогда нужно загрузится с LiveCD и сделать import/export пула. После этого размер пула должен увеличится. Старый диск можно вынуть.