lxc でストレージプールを作る
lxc storage create でストレージ・プールを増やせる。 ためしに、btrfs で増やしてみた。
lxc storage create bt02 btrfs
このコマンドは、オプションを指定しなければ、イメージファイルを作成しそこにプールを作ってくれる。
作成されたファイルを確認する
storage list をみれば、どこからストレージ・プールを持ってきてるかわかる。
lxc storage list +---------+--------+--------------------------------------------+-------------+---------+ | NAME | DRIVER | SOURCE | DESCRIPTION | USED BY | +---------+--------+--------------------------------------------+-------------+---------+ | bt01 | btrfs | /var/snap/lxd/common/lxd/disks/bt01.img | | 9 | +---------+--------+--------------------------------------------+-------------+---------+ | bt02 | btrfs | /var/snap/lxd/common/lxd/disks/bt02.img | | 0 | +---------+--------+--------------------------------------------+-------------+---------+
作成されたイメージファイルの確認
lxc storage info で現在の容量を確認できる。
$ lxc storage info bt02 info: description: "" driver: btrfs name: bt02 space used: 3.93MB total space: 30.00GB used by: {}
作った容量を拡張する
わたしは、snapcraft された LXDで作ったので、/var/snap/lxd/common/lxd/disks にイメージファイルがある。
/var/snap/lxd/common/lxd/disks/bt02.img
このファイルは、loop バックデバイスに接続してあるので、losetup でループ・デバイスを確認する
$ sudo losetup NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC /dev/loop8 0 0 1 0 /var/snap/lxd/common/lxd/disks/bt02.img 0 512
今回は loop8 に接続されていた。
イメージファイルの容量を追加
truncate を使って、-s オプションで増分を指定し、容量を拡張する。
sudo trunacate -s +10G /var/snap/lxd/common/lxd/disks/bt02.img
losetup で容量変更を反映
losetup -c これを忘れたら永遠に反映されない。
sudo losetup -c /dev/loop8
-c は -c, --set-capacity <loopdev> resize the device
で、ディスクイメージファイルに従ってループデバイス化したブロックデバイスの容量を反映してくれる。
btrfs で容量を最大にする。
最初にマウントしておく mount
sudo mount /dev/loop8 /mnt
つぎに、リサイズをかける。 brtfs filesystem resize で max を指定。
sudo btrfs filesystem resize max /mnt
最後にマウントを解除する
sudo umount /mnt
変更を確認
takuya@m75q-1:~$ lxc storage info bt02 info: description: "" driver: btrfs name: bt02 space used: 3.93MB total space: 40.74GB
透過圧縮も用意しておくといいと思います。
zstd, lzo, zlib
からアルゴリズムを選び指定します。
lxc storage set default btrfs.mount_options user_subvol_rm_allowed,compress=lzo lxc storage set default btrfs.mount_options user_subvol_rm_allowed,compress=zstd lxc storage set default btrfs.mount_options user_subvol_rm_allowed,compress=zlib
lxc のストレージ管理
lxc のストレージ管理は lxc storage コマンドで基本的に解決する。
LVMだとかブロックデバイスを直接だとか別の方法を組み合わせてやるとちょっとめんどくさいのことも起きるけど、truncate でファイルを作成しループバックで使ってる限り、そこまで面倒はお気なさそうだ。欲を言えば、ファイルが可変長なら良かったのに。