OPNSense めっちゃディスク食う
OpenWRTなら、3GBもあれば十分だったけど。OPNSenseはメモリもディスクも大食らいでした。
こんなことなら libvirt じゃなくて vbox 使えばよかった。後悔はするけど、勇気を持って前に進む。
BSDのコマンドでディスク容量を「オンライン・リサイズ」していきます。
KVM(libvirt)側のゲストのディスク容量を拡大する
libvirt の qemu イメージを指定サイズ拡張する。
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 系のコマンド入れちゃってもいいんだけどそれだとなんか違う気もするし
参考資料
- https://www.freebsd.org/doc/handbook/disks-growing.html
- man growfs
- man gpart