====== 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 SAS E1:S0 1 ( 136G) ONLINE SAS E1:S1 2 ( 136G) ONLINE SAS E1:S2 3 ( 136G) ONLINE SAS E1:S3 SMARTでも取得できますが、インストールが必要です # smartctl -a /dev/mfi0 -d megaraid,1 === START OF INFORMATION SECTION === Vendor: FUJITSU Product: MBE2147RC Revision: 2903 Serial number: D00ABCDEFG01 ==== 物理ディスクの確認 ==== mfiutlでLEDを光らせることが可能です # mfiutil locate 1 on 消すときは # mfiutil locate 1 off ==== ディスクの停止 ==== 見てきたように、コントローラ配下で管理されていることから、OSでの認識番号とコントローラ上の番号は一致していると思われます。 では、3番を停止します # zpool offline zroot mfid3p3 ==== 交換 ==== HotSwapに対応しているのでそのまま交換しました(( mfiutil fail した方が良いかも)) ==== Onlineにする ==== 見ると、「UNCONFIGURED」になっています # mfiutil show drives 3 ( 838G) UNCONFIGURED GOOD SCSI-6 E1:S3 ONLINEにします mfiutil create raid0 3 または mfiutil create jbod e1:s3 上手くいけば**ONLINE**に変わるはず # mfiutil show drives 3 ( 838G) ONLINE 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**コマンドでいじる((以下の手順で動いた)) # 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 をインストールします((GPTを理解しないBIOSなどから保護するらしい)) # gpart bootcode -b /boot/pmbr mfid# FreeBSD カーネルとモジュールをロードする 2 番目のステージのブートローダパーティションを追加して、ブートコードを書き込む((zfs root用でufsの時は違うので注意)) # 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も自動的に大きくなったが現在はそうならない((13.1で確認))((先にautoexpandをonにしてからDisk交換すれば自動で大きくなるはず)) # 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拡張可能の模様 実際に拡張する((デバイスは1つ指定すれば良い模様)) 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 ===== 参考 ===== * [[https://stevendouglas.me/posts/freebsd-replace-a-root-disk-from-bsdinstall-connected-to-a-raid-controller/|FreeBSD replace a root disk from bsdinstall connected to a RAID controller]] * [[https://github-wiki-see.page/m/shawfdong/hyades/wiki/Replacing-Hard-Drive-In-Ambrosia|Replacing Hard Drive In Ambrosia - shawfdong/hyades GitHub Wiki]]