それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

OPNSenseゲストのdisk容量をリサイズした

OPNSense めっちゃディスク食う

OpenWRTなら、3GBもあれば十分だったけど。OPNSenseはメモリもディスクも大食らいでした。

こんなことなら libvirt じゃなくて vbox 使えばよかった。後悔はするけど、勇気を持って前に進む。

BSDのコマンドでディスク容量を「オンライン・リサイズ」していきます。

KVM(libvirt)側のゲストのディスク容量を拡大する

libvirtqemu イメージを指定サイズ拡張する。

sudo qemu-img resize /var/lib/libvirt/images/generic.qcow2  +5G

結果がこれになります。10GBに増えています。サイズ5GB で使い切ってて5GB足したので10GBになっています。

takuya@:~$ sudo qemu-img info /var/lib/libvirt/images/generic.qcow2
image: /var/lib/libvirt/images/generic.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 5.0G
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: true
    refcount bits: 16
    corrupt: false

OPNSense(FreeBSD) 側でディスク拡張

ディスク拡張は Linux と違うのでちょっと慣れが必要

通常通りログインします。

通常通りログイン

root@OPNsense:~ # 

gpart でディスクを確認します。

root@OPNsense:~ #  gpart list
Geom name: vtbd0
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 20971479
first: 40
entries: 152
scheme: GPT
Providers:
1. Name: vtbd0p1
   Mediasize: 209715200 (200M)
  (略
2. Name: vtbd0p2
   Mediasize: 524288 (512K)
  (略
3. Name: vtbd0p3
   Mediasize: 8589934592 (8.0G)
  (略
Consumers:
1. Name: vtbd0
   Mediasize: 10737418240 (10G)
   Sectorsize: 512
   Mode: r1w1e3

ここから、virtio のディスクは vtbd0 という名前であるとわかる。 パーティション名は vtbd0p1 / vtbd0p2 / vtbd0p3 であるとわかる。

バイス名からパーミッションを一覧します。

root@OPNsense:~ # gpart show vtbd0
=>      40  10485680  vtbd0  GPT  (10G) [CORRUPT]
        40    409600      1  efi  (200M)
    409640      1024      2  freebsd-boot  (512K)
    410664   8388600      3  freebsd-ufs  (4.0G)
   8799264   1686456         - free -  (823M)

今回は、EFI起動ディスクを採用しているためefi / boot / root と3つのパーティションがあります。

残容量を最新に反映

パーティションを確認しました。しかし、残容量が反映されていません。

パーティションを反映させる。

root@OPNsense:~ # gpart recover vtbd0
vtbd0 recovered

残容量が更新された

更新されて、残量のfree が変化したことを確認した。

root@OPNsense:~ # gpart show vtbd0
=>      40  20971440  vtbd0  GPT  (10G)
        40    409600      1  efi  (200M)
    409640      1024      2  freebsd-boot  (512K)
    410664   8388600      3  freebsd-ufs  (4.0G)
   8799264  12172216         - free -  (5.8G)

パーティション3に容量を割り当て

パーティション3の直後がフリーな空きエリアなので、単純に容量を拡大できる。

root@OPNsense:~ # gpart resize -i 3  -s 8G vtbd0
vtbd0p3 resized

パーティション3なので インデックス -i3 を指定、変更後の容量を -s 8G で指定、対象は virtio vtbd0 を指定した。

もし ufs の後ろにSwapなどがあれば一旦削除する必要がある。LVMみたいに容量割り当てるというより、ディスク容量のパーティションを拡大する感じ。

容量の割当の結果を表示

容量が移動したことを確認。

root@OPNsense:~ # gpart show vtbd0
=>      40  20971440  vtbd0  GPT  (10G)
        40    409600      1  efi  (200M)
    409640      1024      2  freebsd-boot  (512K)
    410664  16777216      3  freebsd-ufs  (8.0G)
  17187880   3783600         - free -  (1.8G)

空き容量が減って、ufs が増えたことがわかる。

パーティションをリサイズ

root@OPNsense:~ # growfs /
Device is mounted read-write; resizing will result in temporary write suspension for /.
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/gpt/rootfs, mounted on /, from 6.0GB to 8.0GB? [yes/no] yes
super-block backups (for fsck_ffs -b #) at:
 12822592, 14104832, 15387072, 16669312

マウント中の / (root) ファイルシステムの拡張をするので / を指定してる

ちなみに、マウント中のルート・パーティションの場合直接デバイス・ファイルを指定することは出来ない。 マウント中のroot ファイルシステムにgrowfs をかけるとパーミッション denied になった。

root@OPNsense:~ # growfs /dev/vtbd0p3
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/vtbd0p3 from 6.0GB to 8.0GB? [yes/no] yes
growfs: /dev/vtbd0p3: Operation not permitted

最大まで拡張するなら

サイズ指定が不要なのでもっと楽。

root@OPNsense:~ # gpart resize -i 3  vtbd0
vtbd0p3 resized
root@OPNsense:~ # growfs /
Device is mounted read-write; resizing will result in temporary write suspension for /.
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/gpt/rootfs, mounted on /, from 8.0GB to 9.8GB? [yes/no] yes
super-block backups (for fsck_ffs -b #) at:
 17951552, 19233792, 20516032

まとめ

gpart で確認して、 growfs で拡張、growfs / でマウント中のrootパーティションを拡張。

vtbd0 は 、vt がvirtio のvt で、bd が block device の略称と思われる。

bsd はやっぱり linux とはだいぶコマンド体系が異なるので、ちょっと面食らうよね。

gnu 系のコマンド入れちゃってもいいんだけどそれだとなんか違う気もするし

参考資料