目次

Diskの交換と容量拡張

環境

やったこと

ディスクの確認

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
    

参考

1)
mfiutil fail <dev num> した方が良いかも
2)
以下の手順で動いた
3)
GPTを理解しないBIOSなどから保護するらしい
4)
zfs root用でufsの時は違うので注意
5)
13.1で確認
6)
先にautoexpandをonにしてからDisk交換すれば自動で大きくなるはず
7)
デバイスは1つ指定すれば良い模様