Diskの交換と容量拡張
環境
- Dell PERC6(LSI)につながれているディスクを交換します
- ZFS raidz1で構成されています
- GPTでパーティションが切られています
- zfs rootで作成されています
やったこと
ディスクの確認
zpoolからの見え方
# zpool status pool: zroot state: ONLINE config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 mfid0p3 ONLINE 0 0 0 mfid1p3 ONLINE 0 0 0 mfid2p3 ONLINE 0 0 0 mfid3p3 ONLINE 0 0 0 errors: No known data errors
GPTパーティション
# gpart show mfid1 => 40 284950448 mfid1 GPT (136G) 40 1024 1 freebsd-boot (512K) 1064 984 - free - (492K) 2048 4194304 2 freebsd-swap (2.0G) 4196352 280752128 3 freebsd-zfs (134G) 284948480 2008 - free - (1.0M)
LSIのコントローラにつながれているため、一般に良く挙げられているコマンドは使えません
glabel status dmesg | grep -B1 'Serial Number' camcontrol devlist geom disk list
mfiutlを使います
# mfiutil show drives mfi0 Physical Drives: 0 ( 136G) ONLINE <FUJITSU MBE2147RC 2903 serial=D00ABCDEFG00> SAS E1:S0 1 ( 136G) ONLINE <FUJITSU MBE2147RC 2903 serial=D00ABCDEFG01> SAS E1:S1 2 ( 136G) ONLINE <FUJITSU MBE2147RC 2903 serial=D00ABCDEFG02> SAS E1:S2 3 ( 136G) ONLINE <FUJITSU MBE2147RC 2903 serial=D00ABCDEFG03> SAS E1:S3
SMARTでも取得できますが、インストールが必要です
# smartctl -a /dev/mfi0 -d megaraid,1 <snip> === START OF INFORMATION SECTION === Vendor: FUJITSU Product: MBE2147RC Revision: 2903 <snip> Serial number: D00ABCDEFG01 <snip>
物理ディスクの確認
mfiutlでLEDを光らせることが可能です
# mfiutil locate 1 on
消すときは
# mfiutil locate 1 off
ディスクの停止
見てきたように、コントローラ配下で管理されていることから、OSでの認識番号とコントローラ上の番号は一致していると思われます。
では、3番を停止します
# zpool offline zroot mfid3p3
交換
HotSwapに対応しているのでそのまま交換しました1)
Onlineにする
見ると、「UNCONFIGURED」になっています
# mfiutil show drives 3 ( 838G) UNCONFIGURED GOOD <SEAGATE STXXXMM0006 9999 serial=S0N345678\000\000??@> SCSI-6 E1:S3
ONLINEにします
mfiutil create raid0 3 または mfiutil create jbod e1:s3
上手くいけばONLINEに変わるはず
# mfiutil show drives 3 ( 838G) ONLINE <SEAGATE STXXXMM0006 9999 serial=S0N345678\000\000??@> SCSI-6 E1:S3
ここで、/var/log/messageなどで新しく作成したvolumeのdevice名を確認
Aug 14 14:22:19 kernel: mfi0: 80245 (745305162s/0x0002/info) - State change on PD 14(e0xf5/s4) from UNCONFIGURED_GOOD(0) to ONLINE(18) Aug 14 14:22:31 kernel: mfi0: 80246 (745305162s/0x0001/info) - VD 04/c is now OPTIMAL Aug 14 14:22:31 kernel: mfi0: 80247 (745305162s/0x0041/info) - Created VD 04/c Aug 14 14:22:31 kernel: mfid4 on mfi0
# mfiutil name mfid4 "slot4"
ここでエラーが出る場合
以下のようなエラーが出る場合
mfiutil: Command failed: Status: 0x54 mfiutil: Failed to add volume: Input/output error
アダプタのキャッシュが悪さしてるのでMegaCliコマンドでいじる2)
# MegaCli -CfgForeign -Clear -a0 There is no foreign configuration on controller 0. Exit Code: 0x00 root@ambrosia:~ # MegaCli -GetPreservedCacheList -a0 Adapter #0 Virtual Drive(Target ID 33): Missing. Exit Code: 0x00 # MegaCli -DiscardPreservedCache -Lall -a0 Adapter #0 Virtual Drive(Target ID 04): Preserved Cache Data Cleared. Exit Code: 0x00
GPTパーティション
zfsがrootでない場合
まずは、GPTスキーマでディスクを登録
# gpart create -s gpt mfid# mfid3 created
gpart add -t freebsd-zfs -l slot# mfid#
これでDiskとしてFreeBSDから使えるようになる
zfs root用
GPTパーティションが切られていましたので同様にパーティションを作成します
まずは、GPTスキーマでディスクを登録
# gpart create -s gpt mfid# mfid# created
最初のステージのブートストラップを保護する MBR をインストールします3)
# gpart bootcode -b /boot/pmbr mfid#
FreeBSD カーネルとモジュールをロードする 2 番目のステージのブートローダパーティションを追加して、ブートコードを書き込む4)
# gpart add -t freebsd-boot -b 40 -s 1024 mfid# # gpart bootcode -p /boot/gptzfsboot -i 1 mfid#
ブートコードを1度に書くこともできる模様
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 mfid#
swapとzfs用パーティションを追加
# gpart add -t freebsd-swap -b 2048 -s 4194304 mfid# # gpart add -t freebsd-zfs -b 4196352 -s 1752691712 mfid#
# gpart show mfid# => 40 1756889008 mfid3 GPT (838G) 40 1024 1 freebsd-boot (512K) 1064 984 - free - (492K) 2048 4194304 2 freebsd-swap (2.0G) 4196352 1752691712 3 freebsd-zfs (836G) 1756888064 984 - free - (492K)
パーティション削除の例
# gpart delete -i 3 mfid# # gpart delete -i 2 mfid# # gpart delete -i 1 mfid# # gpart destroy mfid#
zpoolコマンドで置き換え
状態確認
# zpool status
pool: Zhdd state: DEGRADED ...... gpt/slot3 ONLINE 0 0 0 10913389982825355046 OFFLINE 0 0 0 was /dev/gpt/slot4 gpt/slot5 ONLINE 0 0 0
rebuild
# zpool replace zroot mfid3p3 または # zpool replace Zhdd 10913389982825355046 /dev/gpt/slot4
rebuildが開始されます
# zpool status pool: zroot 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 Jul 14 00:33:08 2022 1.47G scanned at 503M/s, 1.13G issued at 387M/s, 1.47G total 283M resilvered, 76.97% done, 00:00:00 to go config: NAME STATE READ WRITE CKSUM zroot DEGRADED 0 0 0 raidz1-0 DEGRADED 0 0 0 mfid0p3 ONLINE 0 0 0 mfid1p3 ONLINE 0 0 0 mfid2p3 ONLINE 0 0 0 replacing-3 DEGRADED 0 0 0 mfid3p3/old OFFLINE 0 0 0 mfid3p3 ONLINE 0 0 0 (resilvering) errors: No known data errors
容量の拡張
以前は、Diskをすべて交換すればpoolも自動的に大きくなったが現在はそうならない5)6)
# zpool get autoexpand NAME PROPERTY VALUE SOURCE zroot autoexpand off default
zpool listでsizeを確認する
# zpool list -v NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zroot 532G 1.47G 531G - 2.74T 0% 0% 1.00x ONLINE - raidz1-0 532G 1.47G 531G - 2.74T 0% 0.27% - ONLINE mfid3p3 - - - - - - - - ONLINE mfid2p3 - - - - - - - - ONLINE mfid1p3 - - - - - - - - ONLINE mfid0p3 - - - - - - - - ONLINE
2.74T拡張可能の模様
実際に拡張する7)
zpool online -e zroot mfid3p3
# zpool list -v NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zroot 3.26T 1.47G 3.26T - - 0% 0% 1.00x ONLINE - raidz1-0 3.26T 1.47G 3.26T - - 0% 0.04% - ONLINE mfid3p3 - - - - - - - - ONLINE mfid2p3 - - - - - - - - ONLINE mfid1p3 - - - - - - - - ONLINE mfid0p3 - - - - - - - - ONLINE