FreeBSD — увеличение размера ZFS корневого раздела. Способ второй.

Имеем FreeBSD 9.0 RELEASE установленную в в качестве гостевой операционной системы с VMWare vSphere 5.0. Файловая система ZFS. Основной диск 100 Гб — маловат — задача перехать на диск большего объема — 200 Гб.
Мы уже рассматривали такой вариант — там мы просто средствами платформы виртуализации увеличивали объем диска. А если реальное железо? Пробуем тоже самое — но с заменой дисков.
Имеем:

# dmesg | grep da0
da0 at mpt0 bus 0 scbus2 target 0 lun 0
da0: <VMware Virtual disk 1.0> Fixed Direct Access SCSI-2 device
da0: 320.000MB/s transfers (160.000MHz, offset 127, 16bit)
da0: Command Queueing enabled
da0: 102400MB (209715200 512 byte sectors: 255H 63S/T 13054C)
# gpart show
=>    34  209715133  da0  GPT   (100G)
      34         94    1  freebsd-boot   (47k)
     128  209715039    2  freebsd-zfs   (100G)
# zpool status -v
pool: zroot
state: ONLINE
scan: none requested
config:

NAME      STATE READ WRITE CKSUM
zroot    ONLINE    0     0     0
  da0p2  ONLINE    0     0     0

errors: No known data errors

Идем VMWare vShere Client выбираем Inventory — Virtual Machine — Edit Settings. Закладка Hardware — кнопка Add. Добавляем еще один жесткий диск объемом 200 Гб. Тут же получаем:

# tail /var/log/messages | grep da1
kernel: da1 at mpt0 bus 0 scbus2 target 1 lun 0
kernel: da1: <VMware Virtual disk 1.0> Fixed Direct Access SCSI-2 device
kernel: da1: 320.000MB/s transfers (160.000MHz, offset 127, 16bit)
kernel: da1: Command Queueing enabled
kernel: da1: 204800MB (419430400 512 byte sectors: 255H 63S/T 26108C)

Размечаем новый диск с помощью gpart.

# gpart create -s gpt da1
da1 created
# gpart add -b 34 -s 94 -t freebsd-boot da1
da1p1 added
# gpart add -t freebsd-zfs -l disk0 da1
da1p2 added
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1
bootcode written to da1

Смотрим что получилось.

# gpart show
=> 34 209715133 da0 GPT (100G)
      34 94 1 freebsd-boot (47k)
     128 209715039 2 freebsd-zfs (100G)

=> 34 419430333 da1 GPT (200G)
      34 94 1 freebsd-boot (47k)
     128 419430239 2 freebsd-zfs (200G)

Смотрим состояние переменной autoexpand нашего пула zroot.

# zpool get autoexpand zroot
NAME PROPERTY VALUE SOURCE
zroot autoexpand off default

Разрешаем автоувеличение пула.

# zpool set autoexpand=on zroot
# zpool get autoexpand zroot
NAME PROPERTY VALUE SOURCE
zroot autoexpand on local

Присоединяем новый диск в массив.

# zpool attach zroot da0p2 da1p2
Make sure to wait until resilver is done before rebooting.

If you boot from pool 'zroot', you may need to update
boot code on newly attached disk 'da1p2'.

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.
scan: resilver in progress since Mon Dec 3 10:08:52 2012
1.40G scanned out of 3.14G at 23.4M/s, 0h1m to go
1.40G resilvered, 44.48% done
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
da0p2 ONLINE 0 0 0
da1p2 ONLINE 0 0 0 (resilvering)

errors: No known data errors

Идет перенос данных (ресилвер). Хоть мы и записывали загрузчик на новый диск в самом начале — но раз просит — обновим его везде, эту операцию можно производить прямо во время переноса данных.

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
bootcode written to da0
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1
bootcode written to da1

Перенос данных проходит быстро. На моем оборудовании 3 Гб данных было перенесено за 1 минуту.

# zpool status -v
pool: zroot
state: ONLINE
scan: resilvered 3.14G in 0h1m with 0 errors on Mon Dec 3 10:10:47 2012
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
da0p2 ONLINE 0 0 0
da1p2 ONLINE 0 0 0

errors: No known data errors

Удаляем старый диск из пула.

# zpool detach zroot da0p2

Смотрим что получилось.

# zpool status -v
pool: zroot
state: ONLINE
scan: resilvered 3.14G in 0h1m with 0 errors on Mon Dec 3 10:10:47 2012
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
da1p2 ONLINE 0 0 0

errors: No known data errors

# df -h zroot
Filesystem    Size    Used   Avail Capacity  Mounted on
zroot         189G    350M    189G     0%    /

Возвращаем значения по умолчанию.

# zpool set autoexpand=off zroot
# zpool get autoexpand zroot
NAME PROPERTY VALUE SOURCE
zroot autoexpand off default

Удаляем старый диск.

# tail /var/log/messages
kernel: mpt0: Rescan Port: 0
kernel: (da0:mpt0:0:0:0): lost device - 0 outstanding
kernel: (da0:mpt0:0:0:0): removing device entry
# gpart show
=> 34 419430333 da1 GPT (200G)
34 94 1 freebsd-boot (47k)
128 419430239 2 freebsd-zfs (200G)

# zpool status -v
pool: zroot
state: ONLINE
scan: resilvered 3.14G in 0h1m with 0 errors on Mon Dec 3 10:10:47 2012
config:

NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
da1p2 ONLINE 0 0 0

errors: No known data errors

Ну и для очистки совести контрольная перезагрузка.

# gpart show
=>       34  419430333  da0  GPT  (200G)
         34         94    1  freebsd-boot  (47k)
        128  419430239    2  freebsd-zfs  (200G)

# zpool status -v
  pool: zroot
 state: ONLINE
 scan: resilvered 3.14G in 0h1m with 0 errors on Mon Dec  3 10:10:47 2012
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          da0p2     ONLINE       0     0     0

errors: No known data errors
# df -h zroot
Filesystem    Size    Used   Avail Capacity  Mounted on
zroot         189G    350M    189G     0%    /

Данный способ подходит для любого типа реального железа — более того, если у вас оборудование позволяет менять жесткие диски на горячую — мы можем произвести данную операцию без остановки обслуживания.

Один комментарий к “FreeBSD — увеличение размера ZFS корневого раздела. Способ второй.

Добавить комментарий

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.