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.
というわけで「増やせるけど減らせない」から増やす前に確保せざるを得ないという次第。