2012年8月に作成したRAID Z2 のディスク容量が流石に90%近くになってきたのと、7年近く動作しっぱなしなので、容量アップのためにディスクを交換してみた。
一般的にディスク交換というと故障時を想定され、検索しても殆どそういう事例ばっかり。
今回はRAID Z2プールの容量を増やすためにディスク交換をします。
3TB (WDC WD30EZRX-00MMMB0) x5 (利用容量 9TB)
↓
6TB (WDC WD60EZRZ-00GZ5B1) x5 (利用容量 18TB)
以下の様に設定すると、自動的にプールを構成する最小のディスクまで容量を拡大します。
zpool set autoexpand=on プール名
交換前の状況
# zfs list z2 NAME USED AVAIL REFER MOUNTPOINT z2 7.12T 712G 369K /z2
# zpool list z2 NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT z2 13.6T 12.0T 1.60T - - 29% 88% 1.00x ONLINE -
# zpool status z2 pool: z2 state: ONLINE scan: scrub repaired 0 in 0 days 21:21:01 with 0 errors on Tue Dec 31 13:08:15 2013 config: NAME STATE READ WRITE CKSUM z2 ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 ada2 ONLINE 0 0 0 ada3 ONLINE 0 0 0 ada4 ONLINE 0 0 0 ada5 ONLINE 0 0 0 ada6 ONLINE 0 0 0 logs gpt/ZIL ONLINE 0 0 0 cache gpt/L2ARC ONLINE 0 0 0 errors: No known data errors
# zfs get all z2 NAME PROPERTY VALUE SOURCE z2 type filesystem - z2 creation Sun Aug 12 5:31 2012 - z2 used 7.12T - z2 available 712G - z2 referenced 369K - z2 compressratio 1.00x - z2 mounted yes - z2 quota none default z2 reservation none default z2 recordsize 128K default z2 mountpoint /z2 default z2 sharenfs off default z2 checksum on default z2 compression off default z2 atime off local z2 devices on default z2 exec on default z2 setuid on default z2 readonly off default z2 jailed off default z2 snapdir hidden default z2 aclmode discard default z2 aclinherit restricted default z2 createtxg 1 - z2 canmount on default z2 xattr off temporary z2 copies 1 default z2 version 5 - z2 utf8only off - z2 normalization none - z2 casesensitivity sensitive - z2 vscan off default z2 nbmand off default z2 sharesmb off default z2 refquota none default z2 refreservation none default z2 guid 1104726788245315386 - z2 primarycache all default z2 secondarycache all default z2 usedbysnapshots 0 - z2 usedbydataset 369K - z2 usedbychildren 7.12T - z2 usedbyrefreservation 0 - z2 logbias latency default z2 dedup off default z2 mlslabel - z2 sync standard default z2 dnodesize legacy default z2 refcompressratio 1.00x - z2 written 369K - z2 logicalused 7.12T - z2 logicalreferenced 42K - z2 volmode default default z2 filesystem_limit none default z2 snapshot_limit none default z2 filesystem_count none default z2 snapshot_count none default z2 redundant_metadata all default
# zpool get all z2 NAME PROPERTY VALUE SOURCE z2 size 13.6T - z2 capacity 88% - z2 altroot - default z2 health ONLINE - z2 guid 17706325187021212029 default z2 version - default z2 bootfs - default z2 delegation on default z2 autoreplace off default z2 cachefile - default z2 failmode wait default z2 listsnapshots off default z2 autoexpand on local z2 dedupditto 0 default z2 dedupratio 1.00x - z2 free 1.60T - z2 allocated 12.0T - z2 readonly off - z2 comment - default z2 expandsize - - z2 freeing 0 default z2 fragmentation 29% - z2 leaked 0 default z2 bootsize - default z2 checkpoint - - z2 feature@async_destroy enabled local z2 feature@empty_bpobj active local z2 feature@lz4_compress active local z2 feature@multi_vdev_crash_dump enabled local z2 feature@spacemap_histogram active local z2 feature@enabled_txg active local z2 feature@hole_birth active local z2 feature@extensible_dataset enabled local z2 feature@embedded_data active local z2 feature@bookmarks enabled local z2 feature@filesystem_limits enabled local z2 feature@large_blocks enabled local z2 feature@large_dnode enabled local z2 feature@sha512 enabled local z2 feature@skein enabled local z2 feature@device_removal enabled local z2 feature@obsolete_counts enabled local z2 feature@zpool_checkpoint enabled local z2 feature@spacemap_v2 active local
# zdb z2: version: 5000 name: 'z2' state: 0 txg: 32269787 pool_guid: 17706325187021212029 hostid: 816742863 hostname: '' com.delphix:has_per_vdev_zaps vdev_children: 2 vdev_tree: type: 'root' id: 0 guid: 17706325187021212029 children[0]: type: 'raidz' id: 0 guid: 480424028443515338 nparity: 2 metaslab_array: 30 metaslab_shift: 37 ashift: 12 asize: 15002940211200 is_log: 0 create_txg: 4 com.delphix:vdev_zap_top: 144 children[0]: type: 'disk' id: 0 guid: 17236174214164006938 path: '/dev/ada2' phys_path: '/dev/ada2' whole_disk: 1 create_txg: 4 com.delphix:vdev_zap_leaf: 145 children[1]: type: 'disk' id: 1 guid: 18399679726301555998 path: '/dev/ada3' phys_path: '/dev/ada3' whole_disk: 1 create_txg: 4 com.delphix:vdev_zap_leaf: 146 children[2]: type: 'disk' id: 2 guid: 3607248189321886847 path: '/dev/ada4' phys_path: '/dev/ada4' whole_disk: 1 create_txg: 4 com.delphix:vdev_zap_leaf: 147 children[3]: type: 'disk' id: 3 guid: 17629066748135742555 path: '/dev/ada5' phys_path: '/dev/ada5' whole_disk: 1 create_txg: 4 com.delphix:vdev_zap_leaf: 148 children[4]: type: 'disk' id: 4 guid: 15125946159616034421 path: '/dev/ada6' phys_path: '/dev/ada6' whole_disk: 1 create_txg: 4 com.delphix:vdev_zap_leaf: 194 children[1]: type: 'disk' id: 1 guid: 16638564188068972173 path: '/dev/gpt/ZIL' phys_path: '/dev/gpt/ZIL' whole_disk: 1 metaslab_array: 104 metaslab_shift: 27 ashift: 12 asize: 17175150592 is_log: 1 create_txg: 8785109 com.delphix:vdev_zap_leaf: 195 com.delphix:vdev_zap_top: 196 features_for_read: com.delphix:hole_birth com.delphix:embedded_data
交換
事前にVirtualBox で検証した結果、以下の方法で行いました。
1. シャットダウン
2. HDDを1台交換
3.起動
通常に起動するが、Raid Z2は壊れている状態。
以下は、構成するHDDが利用できない状態。
ada2に新しいHDDが接続されている。
# zpool status z2 pool: z2 state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://illumos.org/msg/ZFS-8000-2Q scan: scrub repaired 0 in 0 days 21:21:01 with 0 errors on Tue Dec 31 13:08:15 2013 config: NAME STATE READ WRITE CKSUM z2 DEGRADED 0 0 0 raidz2-0 DEGRADED 0 0 0 17236174214164006938 UNAVAIL 0 0 0 was /dev/ada2 ada3 ONLINE 0 0 0 ada4 ONLINE 0 0 0 ada5 ONLINE 0 0 0 ada6 ONLINE 0 0 0 logs gpt/ZIL ONLINE 0 0 0 cache gpt/L2ARC ONLINE 0 0 0 errors: No known data errors
4. RAID Z2 プールを構成するHDDを交換
ここでは、同じポートに換装しているので、そのまま以前の guid と新しいHDDのデバイス名を指定します。
# zpool replace z2 17236174214164006938 ada2
5. RAID Z2内で交換作業が始まる
ここらへんは故障時の交換と何ら変わらないです。
# zpool status z2 pool: z2 state: DEGRADED 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 Thu Mar 14 21:10:45 2019 2.94T scanned at 2.62G/s, 294G issued at 261M/s, 12.0T total 58.6G resilvered, 2.39% done, 0 days 13:04:40 to go config: NAME STATE READ WRITE CKSUM z2 DEGRADED 0 0 0 raidz2-0 DEGRADED 0 0 0 replacing-0 UNAVAIL 0 0 0 17236174214164006938 UNAVAIL 0 0 0 was /dev/ada2/old ada2 ONLINE 0 0 0 ada3 ONLINE 0 0 0 ada4 ONLINE 0 0 0 ada5 ONLINE 0 0 0 ada6 ONLINE 0 0 0 logs gpt/ZIL ONLINE 0 0 0 cache gpt/L2ARC ONLINE 0 0 0 errors: No known data errors
6. HDD1台交換完了
大体12時間位かかった。
この時点では容量は増えないです。
# zpool status z2 pool: z2 state: ONLINE scan: resilvered 2.40T in 0 days 14:21:55 with 0 errors on Fri Mar 15 11:32:40 2019 config: NAME STATE READ WRITE CKSUM z2 ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 ada2 ONLINE 0 0 0 ada3 ONLINE 0 0 0 ada4 ONLINE 0 0 0 ada5 ONLINE 0 0 0 ada6 ONLINE 0 0 0 logs gpt/ZIL ONLINE 0 0 0 cache gpt/L2ARC ONLINE 0 0 0 errors: No known data errors
7. 1〜6の手順を残り4台分繰り返す
8. 完了
大体4日くらいで5台交換完了しました。
容量はそのまま倍増
# zfs list z2 NAME USED AVAIL REFER MOUNTPOINT z2 7.12T 8.50T 369K /z2
# zpool list z2 NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT z2 27.2T 12.0T 15.2T - - 14% 44% 1.00x ONLINE -
ベンチマーク
とりあえず、OSやsambaも最新だったりするので、完璧な比較ではないが、速度は当時よりは向上している。
交換後
交換前(作成当時2012年)
今まで使っていた3TBはWD Greenでありながら、6年半以上ほぼ無停止にかかかわらず、ノントラブルでした。しかもIntelliParkは有効でデフォの8秒のまま。
以下は交換前の主なS.M.A.R.T.値
- Power_On_Hours 57650
- Load_Cycle_Count は47万回以上
- エラーは無し
今回は、WD Blueでほぼ同じスペックですが、故障率が上がるということなので、無効にしました。
だいたい、2012年当時と比べて、共有サービスとして動かしているのは動かしているのはSambaとNextCloudくらいですが、未だにデスクトップ兼サーバーとして動かしています。
(もちろんこのサイトもjail内に作成しています)
システムも当時からすぐ(2012年9月)にリプレースしたりして、現在は以下の通り
OS
FreeBSD 12-STABLE GENERIC amd64
スペック
CPU i7 3770K
MB P8Z77-V PRO
MEM 32GB
電源 Corsair 600W
GPU Geforce GTX 960 2GB
ストレージ
SSD TOSHIBA THNSNH256GCST 256GB (システム用 ZFS root)
SSD INTEL SSDSA2CW120G3 (L2ARC ZIL用)
HDD WD60EZRZ-00GZ5B1 x 5台 (RAID Z2用)
初めてコメントいたします。
少し疑問に感じたのですが、poolの容量を増やすときにautoexpandを使用されたのでしょうか?
7TBもご使用されていたのでしたら、外付けUSB 3の8bayケース等にHDDを入れてraidz 2 で新しくプールを作って rsyncやcpコマンドでデータをコピーして後で旧いdiskを交換して、import時にpool名を変えたら1日で完了したのではと感じました。何か特別な良い理由があったのでしょうか。
>>ディスク交換というと故障時を想定
確かにそうですね。
実は、kvm 内の使用しているのですが、zvol 容量を増やしてゲストOSのubuntuで使用しているrpool自体のautoexpandが有効かどうかを検索していてこちらを読ませていただきました。
zvolはrootシステムで使用しているのですがsanpshotが自動で増加するので今後の事を考えて100G単位で増加させることを念頭にテストをしています。まだ解決できておりません。orz
興味深いご投稿でしたのでコメントいたしました。
また拝見させていただきます。
コメントありがとうございます!
>>poolの容量を増やすときにautoexpandを使用されたのでしょうか?
そうですね。冒頭にあるとおり、autoexpandを有効にしています。
>>7TBもご使用されていたのでしたら、外付けUSB 3の8bayケース等にHDDを入れてraidz 2 で新しくプールを作って rsyncやcpコマンドでデータをコピーして後で旧いdiskを交換して、import時にpool名を変えたら1日で完了したのではと感じました。何か特別な良い理由があったのでしょうか。
第一にそのまま利用しつつ、移行したかったからです。
また、一時的なデータの移動のためだけに、無駄な出費をかけたくなかったからです。
値段も3万くらいしますし、それを回避するためにこの方法を選びました。