Замена диска в ZFS

Итак, 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: можно из сингл диска делать миррор и наоборот.

Взял тут.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *