FreeBSDの公式VHDの空き容量を増やす(パーティションの手動割り当て)

Hyper-V上で利用するのに公式からVHDをダウンロードしたところ、可変容量設定になっているのに初期サイズ以上に拡張してくれずfilesystem fullなどと表示され碌にソフトがインストールできない。 isoからインストールし直す事も考えたが面倒なので、何とかしてみる事にした。

利用したのはFreeBSD 12.3 amd64

Hyper-Vマネージャで容量可変(VHD, 4GB)から容量固定(VHDX, 16GB)へディスクイメージを変換するが、そのままでは増やした部分が認識されないのでパーティションを手動で割り当てる。

念のためSingle userモードで起動し、現状を確認する。

# gpart show
=>       3  10488235  da0  GPT  (16G) [CORRUPT]
         3       126    1  freebsd-boot  (63K)
       129      1600    2  efi  (800K)
      1729   2097152    3  freebsd-swap  (1.0G)
   2098881   8388608    4  freebsd-ufs  (4.0G)
  10487489       749       - free -  (375K)

空きスペースが正しく認識されず[CURRUPT]となっているのでrecoverする。

# gpart recover da0
da0 recovered
# gpart show
=>       3  33554421  da0  GPT  (16G)
         3       126    1  freebsd-boot  (63K)
       129      1600    2  efi  (800K)
      1729   2097152    3  freebsd-swap  (1.0G)
   2098881   8388608    4  freebsd-ufs  (4.0G)
  10487489  23066935       - free -  (11G)

正しく認識されたのでパーティションを拡張する。幸いデータ用のパーティションが最後にあるので、このままresizeする。

# gpart resize -i 4 da0
da0p4 resized
# gpart show
=>       3  33554421  da0  GPT  (16G)
         3       126    1  freebsd-boot  (63K)
       129      1600    2  efi  (800K)
      1729   2097152    3  freebsd-swap  (1.0G)
   2098881  31390015    4  freebsd-ufs  (15G)
  33488896     65528       - free -  (32M)

増えた。ちなみに[CURRUPT]を解決せずに拡張しようとすると以下のエラーが出る。

# gpart resize -i 4 da0
gpart: autofill: No space left on device

最後にこれを適用する。

# growfs /dev/da0p4
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/da0p4 from 4.0GB to 15GB? [yes/no] yes
growfs: /dev/da0p4: Operation not permitted

oh...

# growfs /dev/gpt/rootfs
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/gpt/rootfs, monted on /, from 4.0GB to 15GB? [yes/no] yes
super-block backups (for fsck_ffs -b #) at:
 8975872, 10258112, 11540352, 12822592, 14104832, 15387072, 16669312, 17951552, 19233792, 20516032, 21798272, 23080512, 24362752, 25644992, 26927232, 28209474, 29491712, 30773952

念のためdfコマンドなどで容量を確認し、問題が無ければreboot。通常通りMulti userモードで本来の作業を行う。