ZFSが使用率100%になったら

ある時、ファイルサーバー(FreeNAS)の非冗長ZFSファイルシステム(F/S)の1つが、CIFSの共有フォルダから消えていることに気が付きました。

調べてみると、F/Sはちゃんとあるし HELTHY かつ ONLINEになっています。 でもアクセスが出来ません。 
原因はF/Sの使用率が100%になっているからのようです。 しかしファイルを消そうにもアクセス出来ないのですからどうにもなりません。

より容量の大きなHDDにF/Sを移せればデータを救えるかもしれません。
満杯になったHDDは 4TBなので、それ以上というと 5TBとか 6TBになります(10TBとかも出てますが)。 まだ価格がこなれてないので、あまり手を出したくないのですが仕方ありません。

IMG_20150117_180921.jpg

ZFSはF/Sの Snapshotを取ってコピーする機能がありますが、コピー元のF/Sの使用率が100%だと Snapshotが作れません。
どうしたものかとググってみても、あまりこういう理由で困っている人を見かけません。

どうやら「より大きなHDDを追加してミラー化されたストレージプールにして、その後に古いHDDを取り外す」ことで、実質的に大きなHDDに置き換えるのが一般的なようです。
やってみましょう。 まずは新しい 6TB HDDにパーテーションを作成します。

[root@freenas] ~# gpart create -s GPT ada1
ada1 created
[root@freenas] ~# gpart add -a 4k -t freebsd-zfs ada1
ada1p1 added

現状はこんな感じです。 記事にはしませんでしたが昨年9月にも4TBを買ったので、3TB x 2、4TB x 3という体制になっています。

[root@freenas] ~# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
freenas-boot 7.19G 941M 6.27G - - 12% 1.00x ONLINE -
pool01 2.72T 2.39T 335G - 1% 87% 1.00x ONLINE /mnt
pool02 2.72T 2.60T 120G - 2% 95% 1.00x ONLINE /mnt
pool03a 3.62T 3.53T 98.5G - 2% 97% 1.00x ONLINE /mnt
pool04a 3.62T 3.24T 397G - 2% 89% 1.00x ONLINE /mnt
pool05 3.62T 3.25T 380G - 3% 89% 1.00x ONLINE /mnt
[root@freenas] ~# zpool status pool03a
pool: pool03a
state: ONLINE
status: One or more devices are configured to use a non-native block size.
Expect reduced performance.
action: Replace affected devices with devices that support the
configured block size, or migrate data to a properly configured
pool.
scan: scrub repaired 0 in 12h22m with 0 errors on Sun Dec 28 00:22:58 2014
config:

NAME STATE READ WRITE CKSUM
pool03a ONLINE 0 0 0
ada0p1 ONLINE 0 0 0 block size: 512B configured, 4096B native

errors: No known data errors

ミラー化するコマンドはこれだけ。

[root@freenas] ~# zpool attach pool03a ada0p1 ada1p1

本当にミラー化されたか確認してみます。

[root@freenas] ~# zpool status pool03a
pool: pool03a
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 Sat Jan 17 19:20:55 2015
311M scanned out of 3.53T at 25.9M/s, 39h37m to go
311M resilvered, 0.01% done
config:

NAME STATE READ WRITE CKSUM
pool03a ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p1 ONLINE 0 0 0 block size: 512B configured, 4096B native
ada1p1 ONLINE 0 0 0 block size: 512B configured, 4096B native (resilvering)

errors: No known data errors

「resilvering」というのはミラー中ということで、元からあったHDDから追加したHDDにデータをコピーしているということです。 昨日の19:20から始めて、39時間37分後に終わるそうです。 さすがに3.5TBもあると長いですね。

[root@freenas] ~# zpool status pool03a
pool: pool03a
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 Sat Jan 17 19:20:55 2015
3.53T scanned out of 3.53T at 54.0M/s, (scan is slow, no estimated time)
3.53T resilvered, 100.01% done
config:

NAME STATE READ WRITE CKSUM
pool03a ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p1 ONLINE 0 0 0 block size: 512B configured, 4096B native
ada1p1 ONLINE 0 0 0 block size: 512B configured, 4096B native (resilvering)

errors: No known data errors
[root@freenas] ~# zpool status pool03a
pool: pool03a
state: ONLINE
status: One or more devices are configured to use a non-native block size.
Expect reduced performance.
action: Replace affected devices with devices that support the
configured block size, or migrate data to a properly configured
pool.
scan: resilvered 3.53T in 19h2m with 0 errors on Sun Jan 18 14:23:54 2015
config:

NAME STATE READ WRITE CKSUM
pool03a ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p1 ONLINE 0 0 0 block size: 512B configured, 4096B native
ada1p1 ONLINE 0 0 0 block size: 512B configured, 4096B native

errors: No known data errors

でも実際には半分の19時間でコピーが完了しました。
次に元からあった4TB HDD(ada0p1)をプールから外します。 その次の行は、大きくなったHDD容量を認識させるためのおまじないです。

[root@freenas] ~# zpool detach pool03a ada0p1
[root@freenas] ~# zpool online -e pool03a ada1p1

実際に容量が増えたかどうか確認してみましょう。

[root@freenas] ~# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
freenas-boot 7.19G 942M 6.27G - - 12% 1.00x ONLINE -
pool01 2.72T 2.39T 335G - 1% 87% 1.00x ONLINE /mnt
pool02 2.72T 2.60T 120G - 2% 95% 1.00x ONLINE /mnt
pool03a 5.44T 3.53T 1.91T - 1% 64% 1.00x ONLINE /mnt
pool04a 3.62T 3.24T 397G - 2% 89% 1.00x ONLINE /mnt
pool05 3.62T 3.25T 380G - 3% 89% 1.00x ONLINE /mnt
[root@freenas] ~# zpool status pool03a
pool: pool03a
state: ONLINE
status: One or more devices are configured to use a non-native block size.
Expect reduced performance.
action: Replace affected devices with devices that support the
configured block size, or migrate data to a properly configured
pool.
scan: resilvered 3.53T in 19h2m with 0 errors on Sun Jan 18 14:23:54 2015
config:

NAME STATE READ WRITE CKSUM
pool03a ONLINE 0 0 0
ada1p1 ONLINE 0 0 0 block size: 512B configured, 4096B native

errors: No known data errors
[root@freenas] ~#

大丈夫そうですね。 引き続き、pool03aから外した 4TB HDDで pool01の 3TB HDDを置き換える作業をやってます。
ZFSは使用率が95%を超えるとパフォーマンスが落ちるそうです。 今後は気をつけたいと思います。