HDDがいっぱいになってきたので容量の大きい別のHDDに移した。
zfsなのでmirrorをしつつ入れ替えができる。
その時のメモ。
端的に言えばディスク交換後zpool online -eをすればよい。
以下、経緯。
ディスク追加
2.5TのHDD, ada1上に作られたzpool、vaultがあり、残容量は150Gである。
もともとzfsは残容量が少なくなると格段にパフォーマンスが落ちると言われていて、これはちょっと危険な状態である。
ada1 at ahcich1 bus 0 scbus1 target 0 lun 0
ada1: <WDC WD25EZRX-00MMMB0 80.00A80> ATA8-ACS SATA 3.x device
ada1: Serial Number WD-WMAWZ0230443
ada1: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada1: Command Queueing enabled
ada1: 2384658MB (4883781168 512 byte sectors)
ada1: quirks=0x1<4K>
# zpool status
pool: vault
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
vault ONLINE 0 0 0
gpt/disk_01 ONLINE 0 0 0
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
vault 2.05T 150G 88K /vault
vault/chamber 1017G 150G 1017G /chamber
vault/itunes 1.06T 150G 1.05T /itunes
そこで、zpoolにmirrorとして容量の大きいディスクを追加し、その後オリジナルのディスクを外す、という手順。
追加するのは以下のディスク。3T。
2.5Tから3Tじゃ焼け石に水ですがね…。
ada2 at ahcich2 bus 0 scbus2 target 0 lun 0
ada2: <WDC WD30EZRX-00D8PB0 80.00A80> ACS-2 ATA SATA 3.x device
ada2: Serial Number WD-WMC4N0765033
ada2: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes)
ada2: Command Queueing enabled
ada2: 2861588MB (5860533168 512 byte sectors)
ada2: quirks=0x1<4K>
既存のzpoolにmirrorとしてディスクを追加するには、zpool attachを使う。
zpool attachに続けてzpool名、既存ディスク、追加ディスクの順で指定。
以下の例では、ディスクの指定をada2などのデバイス名ではなくGPT名で行っている。
# zpool attach vault gpt/disk_01 gpt/disk_02
以下のようにzpoolがmirror構成になり、resilveringが始まる。
# zpool status
pool: vault
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 0h0m, 0.01% done, 7h1m to go
config:
NAME STATE READ WRITE CKSUM
vault ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
gpt/disk_01 ONLINE 0 0 0
gpt/disk_02 ONLINE 0 0 0
しばらく待つと;
pool: vault
state: ONLINE
scan: resilvered 2.04T in 6h48m with 0 errors on Sun Dec 16 19:15:11 2018
config:
NAME STATE READ WRITE CKSUM
vault ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
gpt/disk_01 ONLINE 0 0 0
gpt/disk_02 ONLINE 0 0 0
resilvering終了。
旧ディスクの除去
2.5Tと3Tのディスクでmirrorを構成しているので、当然ながら残容量に変化はない。
NAME USED AVAIL REFER MOUNTPOINT
vault 2.05T 150G 88K /vault
vault/chamber 1017G 150G 1017G /chamber
vault/itunes 1.06T 150G 1.05T /itunes
では旧ディスクを外す。
mirrorからディスクを外すにはdetachを使う。
zpool detachに続けてzpool名、ディスク名を指定。
# zpool detach vault gpt/disk_01
# zpool status
pool: vault
state: ONLINE
scan: resilvered 2.04T in 6h48m with 0 errors on Sun Dec 16 19:15:11 2018
config:
NAME STATE READ WRITE CKSUM
vault ONLINE 0 0 0
gpt/disk_02 ONLINE 0 0 0
errors: No known data errors
ご覧の通りmirror構成が解除される。
容量の拡張
さてこの状態ではまだ残容量が増えない。
NAME USED AVAIL REFER MOUNTPOINT
vault 2.05T 150G 88K /vault
vault/chamber 1017G 150G 1017G /chamber
vault/itunes 1.06T 150G 1.05T /itunes
ただ物理ディスクは3Tなので、zpoolに「安心して容量を増やしたまえ」と通知する。
通知にはzpool online -eを使う。
zpool onlineは物理ディスクを有効にするコマンドだが、-eを付ければ、使用可能な領域をすべて使うようにできる。
manを以下に引用する。
zpool online [-e] pool device ...
Brings the specified physical device online.
This command is not applicable to spares or cache devices.
-e Expand the device to use all available space. If the device
is part of a mirror or raidz then all devices must be
expanded before the new space will become available to the
pool.
ご覧の通り残容量が増えた。
たったの450Gだけど。
# zpool online -e vault gpt/disk_02
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
vault 2.05T 599G 88K /vault
vault/chamber 1017G 599G 1017G /chamber
vault/itunes 1.06T 599G 1.05T /itunes