Итак, ada1(disk0) старый диск на 500Гб, ada0 – новый на 1Тб.
# df -h zroot Filesystem Size Used Avail Capacity Mounted on zroot 190G 358M 189G 0% / # zpool status -v pool: zroot state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 gpt/disk0 ONLINE 0 0 0 errors: No known data errors
Создаю на новом диске gpt раздел. Создаю загрузочную область (для размещения загрузчика, внезапно). Своп на 4Гб (swap1). Остальное место отдаю для утех на ZFS (disk1).
# gpart create -s gpt ada0 ada0 created # gpart add -s 128 -t freebsd-boot ada0 ada0p1 added # gpart add -s 4G -t freebsd-swap -l swap1 ada0 ada0p2 added # gpart add -t freebsd-zfs -l disk1 ada0 ada0p3 added
Здесь видно по объёму (в Гб) кто есть кто.
# gpart show => 34 976773101 ada1 GPT (466G) 34 128 1 freebsd-boot (64K) 162 8388608 2 freebsd-swap (4.0G) 8388770 968384365 3 freebsd-zfs (462G) => 34 1953525101 ada0 GPT (932G) 34 128 1 freebsd-boot (64K) 162 8388608 2 freebsd-swap (4.0G) 8388770 1945136365 3 freebsd-zfs (928G)
Теперь я делаю классическое присоединение диска disk1 в массив zroot, указывая, конечно же оба диска. Умница ZFS напоминает мне, что нужно записать загрузчик на присоединённый диск.
# zpool attach zroot /dev/gpt/disk0 /dev/gpt/disk1 If you boot from pool 'zroot', you may need to update boot code on newly attached disk '/dev/gpt/disk1'. Assuming you use GPT partitioning and 'da0' is your new boot disk you may use the following command: gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
Начался ресилвер данных. Занимаюсь другими делами.
# zpool status -v
pool: zroot
state: ONLINE
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scrub: resilver in progress for 0h18m, 12.88% done, 2h8m to go
config:
NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
mirror ONLINE 0 0 0
gpt/disk0 ONLINE 0 0 0
gpt/disk1 ONLINE 0 0 0 33.9G resilvered
errors: No known data errors
Записываю загрузчик в mbr. Сделать это можно во время ресилвера, т.к. загрузчик устанавливается в область, ну никак не связанную с ZFS (-i 1).
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 bootcode written to ada0
Теперь все подготовительные работы сделаны. Жду ресилвера, изредка поглядывая в zpool status -v. Когда скруб скажет, что ресилвер завершён, изымаю из пула zroot старый диск (disk0).
# zpool detach zroot /dev/gpt/disk0 # zpool status -v pool: zroot state: ONLINE scrub: resilver completed after 2h8m with 0 errors on Mon Aug 22 09:51:48 2011 config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 gpt/disk1 ONLINE 0 0 0 263G resilvered errors: No known data errors # df -h zroot Filesystem Size Used Avail Capacity Mounted on zroot 647G 358M 646G 0% /
Такие дела. Осталось отключить старый диск физически.
Хинт: если бы я не делал детач старого диска – получил бы (опять же внезапно) массив стандарта RAID 1 (mirroring). Выглядило бы это так:
# zpool status -v pool: zroot state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM home ONLINE 0 0 0 mirror ONLINE 0 0 0 gpt/disk0 ONLINE 0 0 0 gpt/disk1 ONLINE 0 0 0 errors: No known data errors
Так уж устроен ZFS: можно из сингл диска делать миррор и наоборот.
Взял тут.