#LXDの容量が足りない
自分は開発環境としてLXDでコンテナごと切り離すというのに最近は落ち着いてるのですが、コンテナのOSでファイルを解凍しようとしたら容量が足りないと怒られてしまったので拡張する方法をメモしておきます。
#方法
2018/9/3追記 ここから
下の方法は空のイメージを作ってコピーして交換するという方法であったが、
sudo truncate -s 40G /var/lib/lxd/zfs.img
のように直接今まで使っていたimgを拡張して(注:このコマンドでもとのサイズより小さい値を指定するとデータが吹っ飛ぶ)
sudo zpool online -e lxd /var/lib/lxd/zfs.img
とするほうが空き容量も無駄に必要じゃないのでクレバーだろう。拡張した後も問題なく使えている。
ここまで
2022/04/29 追記: imageファイルの場所はzpool status default
とかでわかるので、適宜変更。snapだと/var/snap/lxd/common/lxd/disks/default.img
とかにある。
参考:https://github.com/lxc/lxc/issues/1412
truncate -s 40G /var/lib/lxd/zfs.tmp sudo zpool attach lxd /var/lib/lxd/zfs.img /var/lib/lxd/zfs.tmp
コピーが終わるまで待機
sudo zpool detach lxd /var/lib/lxd/zfs.img sudo rm /var/lib/lxd/zfs.img sudo truncate -s 40G /var/lib/lxd/zfs.img sudo zpool attach lxd /var/lib/lxd/zfs.tmp /var/lib/lxd/zfs.img
コピーが終わるまで待機
sudo zpool detach lxd /var/lib/lxd/zfs.tmp sudo rm /var/lib/lxd/zfs.tmp sudo zpool online -e lxd /var/lib/lxd/zfs.img
#解説
truncateコマンドは因数で与えたサイズの空のファイルを作ってくれる。
2018/9/3追記:上のtruncateコマンドの理解は誤りで、正確には指定したファイルのファイルサイズより大きい値を指定された場合は差分のバイトを0フィルしてサイズを拡張し、小さい場合は後ろを0フィルしてサイズを小さくするというものらしい。存在しないファイルは当然指定した分だけ0フィルされたデータが作られる。
zpool attatchは因数でとったファイルを因数でとったプールへ追加する。detachは逆である。attatchすると勝手にもともとあった奴のデータがコピーされる。**逆に言えばコピーが終わるまで次の操作には進めない。**コピーが終わったかどうかはzpool status lxd
で確認できる。わざわざzfs.tmpを経由して元に戻しているのはzfs.imgという名前を変えないためっぽいけどそれが必須かは不明。ちなみに40Gの部分は拡張したい好きなサイズを入れればいい。
最後のzpool online -eはプールにある指定したデバイスのサイズにプールのサイズを勝手に拡張してくれるコマンドっぽい。