ZFS: out of temporary buffer space

bootcodeの更新をしたときに

root@pt2:/home/piro # gpart show ada0
=>        40  3907029088  ada0  GPT  (1.8T)
          40         256     1  freebsd-boot  (128K)
         296  3907028832     2  freebsd-zfs  (1.8T)

サイズが小さすぎて更新できなかったのを放置して忘れてて再起動してしまったOrz...

[FreeBSD] zfs: out of temporary buffer space – www.ronny-mueller.com

ググるとこんな感じで事例は見つかった。

更新するためにはboot部分を拡張しないといけないのでUSBメモリとHDDを準備して、USB起動し、shell起動する。

#kbdmap
# gpart create -s GPT ada2
ada2 created

kbd設定を日本語にしてパーティション追加。

#gpart add -t freebsd-boot -b 40 -s 984  ada2
#gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada2

bootパーティション追加。サイズは大きすぎてもだめ。

qiita.com

#gpart add -l WD-WMC4N0EASTST -t freebsd-zfs ada2

zfsパーティション追加

#mkdir /tmp/zroot
#zpool import -R /tmp/zroot zroot

zpoolをインポートする。

#zpool attach zroot /dev/ada0p2 /dev/gpt/WD-WMC4N0EASTST

ミラーに追加して同期する

#zfs umount -a
#zpool export -a

同期し終わったらアンマウントし、追加したHDDから起動する

# zpool status
  pool: zroot
 state: ONLINE
  scan: resilvered 48.6G in 01:02:37 with 0 errors on Thu Dec 28 06:25:46 2023
config:

        NAME                     STATE     READ WRITE CKSUM
        zroot                    ONLINE       0     0     0
          mirror-0               ONLINE       0     0     0
            ada0p2               ONLINE       0     0     0
            gpt/WD-WMC4N0EASTST  ONLINE       0     0     0

# zpool detach zroot /dev/ada0p2
# dd if=/dev/zero of=/dev/ada0p2 bs=100M count=1
1+0 records in
1+0 records out
104857600 bytes transferred in 0.850440 secs (123298018 bytes/sec)
# gpart destroy -F ada0
ada0 destroyed

もともとディスクを切り離してパーティションの頭を0埋めして削除。

# gpart destroy -F ada0
ada0 destroyed
# gpart create -s gpt ada0
ada0 created
# gpart add -t freebsd-boot -b 40 -s 984 ada0
ada0p1 added
# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0
partcode written to ada0p1
bootcode written to ada0
# gpart add -l WD-WX82A514SAJ1 -t freebsd-zfs ada0
ada0p2 added

パーティション追加

# zpool attach zroot /dev/gpt/WD-WMC4N0EASTST /dev/gpt/WD-WX82A514SAJ1
# zpool status
  pool: zroot
 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 Wed Dec 27 22:04:51 2023
        24.8G scanned at 446M/s, 1.78M issued at 32K/s, 46.3G total
        0B resilvered, 0.00% done, no estimated completion time
config:

        NAME                     STATE     READ WRITE CKSUM
        zroot                    ONLINE       0     0     0
          mirror-0               ONLINE       0     0     0
            gpt/WD-WMC4N0EASTST  ONLINE       0     0     0
            gpt/WD-WX82A514SAJ1  ONLINE       0     0     0

errors: No known data errors

同期を待って再起動する。