В статье будем рассмотрен механизм замены дисков корневого пула на диски большей ёмкости. Данный метод подходит как для 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 пула. После этого размер пула должен увеличится. Старый диск можно вынуть.