それマグで!

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

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

lxc storage コマンドでストレージプールを指定したフォーマット(btrfs/zfs)で作る

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 でファイルを作成しループバックで使ってる限り、そこまで面倒はお気なさそうだ。欲を言えば、ファイルが可変長なら良かったのに。