NetBSD/aarch64 on ROCK 5B その3 (swapパーティション)

arm64.imgをddで書き込んだ場合、初回起動時になんやかんやでディスクの後ろの未使用領域を使えるようにリサイズしてくれる。くれるのはいいけどswapパーティションを確保したいので全部持っていかれてしまうのは困る。なら起動前に確保してみたという記録。

まずはddでイメージを書き込む。

# dd if=arm64.img of=/dev/rsd0 bs=512

この時のパーティションはこんな感じ。本来はディスクの末尾にあるべきセカンダリGPTテーブルが途中にあり、後ろに大量の未使用領域がある。

# gpt show sd0
      start       size  index  contents
          0          1         MBR
          1          1         Pri GPT header
          2          4         Pri GPT table
          6      32762         Unused
      32768     163840      1  GPT part - EFI System
     196608    2842624      2  GPT part - NetBSD FFSv1/FFSv2
    3039232       2043         Unused
    3041275          4         Sec GPT table
    3041279          1         Sec GPT header
    3041280  497076912         Unused

まずはセカンダリGPTをディスク末尾に移動する。

# gpt -H resizedisk sd0
/dev/rsd0: Moving secondary GPT header
gpt: /dev/rsd0: No valid PMBR partition found

ディスクの後ろに32GBのswapパーティション領域を確保。セクタはおまじないとして2048の倍数になるようにしている。

# gpt add -b 433008640 -l netbsd-swap -s 67108864s -t swap sd0
/dev/rsd0: Partition 3 added: 49f48d32-b10e-11dc-b99b-0019d1879648 433008640 67108864

FFSの後ろの未使用領域を連結して1つのパーティションに拡張する。

# gpt resize -i 2 sd0
/dev/rsd0: Partition 2 resized: 196608 432812032

結果としてこうなった。

# gpt show sd0
      start       size  index  contents
          0          1         MBR
          1          1         Pri GPT header
          2          4         Pri GPT table
          6      32762         Unused
      32768     163840      1  GPT part - EFI System
     196608  432812032      2  GPT part - NetBSD FFSv1/FFSv2
  433008640   67108864      3  GPT part - NetBSD swap
  500117504        683         Unused
  500118187          4         Sec GPT table
  500118191          1         Sec GPT header

パーティションサイズが増えたので、resize_ffs(8)をかけてFFSが使えるようにする。

# resize_ffs /dev/dk10
It's required to manually run fsck on file system before you can resize it

 Did you run fsck on your disk (Yes/No) ? yes

これでswapパーティションを用意でき、ついでにリサイズも終わらせたので設定を合わせる。

まずはマウント。

# mount /dev/dk10 /mnt

/etc/fstab にswapと、ついでにtmpfsを追加。

--- fstab.orig  2025-04-10 23:25:23.708904937 +0900
+++ fstab       2025-05-05 17:34:50.442379134 +0900
@@ -2,6 +2,8 @@
 # See /usr/share/examples/fstab/ for more examples.
 NAME=netbsd-root       /               ffs     rw,noatime      1 1
 NAME=EFI               /boot           msdos   rw      1 1
+NAME=netbsd-swap       none            swap    sw,dp   0 0
 ptyfs          /dev/pts        ptyfs   rw
 procfs         /proc           procfs  rw
 tmpfs          /var/shm        tmpfs   rw,-m1777,-sram%25
+tmpfs          /tmp            tmpfs   rw,-m1777,-sram%50

/etc/rc.conf でswapを有効にするのとリサイズ系を無効化。

--- rc.conf.orig        2025-05-05 17:27:02.441061549 +0900
+++ rc.conf     2025-05-05 17:28:17.466548399 +0900
@@ -47,7 +47,6 @@

 rc_configured=YES
 hostname=arm64
-no_swap=YES
 savecore=NO
 sshd=YES
 dhcpcd=YES
@@ -56,10 +55,6 @@
 creds_msdos=YES
 creds_msdos_partition=/boot
 certctl_init=YES
-resize_gpt=YES
-resize_root=YES
-resize_root_flags="-p"
-resize_root_postcmd="/sbin/reboot -n"
 mdnsd=YES
 devpubd=YES
 wscons=$(dev_exists wsdisplay0)

以上。

ところで『普通に起動して最大までリサイズしてから減らしたほうが楽では?』という気がするが、それに対する resize_ffs(8) の回答がこちら。

Does not currently support shrinking FFSv2 file systems.

というわけで「増やせるけど減らせない」から増やす前に確保せざるを得ないという次第。