それマグで!

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

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

lxc delete 時間かかりすぎるのでストレージまるごと消したい。

lxc delete 時間かかりすぎる

lxc ストレージのbtrfsのrestore(load)に失敗したので。強制的に消す方法を模索する

うっかり、コンテナに200GBも入れてしまったので、時間がかかって仕方ない。

いっそのこと先にストレージをけしたらどうなるのか。1Gのコンテナで試してみることにした。

ストレージとインスタンスを作成する

lxc storage create bt02 btrfs
lxc launch images:debian/11 d11 --storage=bt02

ストレージを消してやる

sudo rm   /var/snap/lxd/common/lxd/disks/bt02.img

ファイルはもうない

sudo ls -alt  /var/snap/lxd/common/lxd/disks/bt02.img
ls: cannot access '/var/snap/lxd/common/lxd/disks/bt02.img': No such file or directory

参照は残ってる。

losetup
NAME        SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                                         DIO LOG-SEC
/dev/loop10         0      0         1  0 /var/snap/lxd/common/lxd/disks/bt02.img (deleted)   1     512
lxc storage list
+---------+--------+--------------------------------------------+-------------+---------+---------+
|  NAME   | DRIVER |                   SOURCE                   | DESCRIPTION | USED BY |  STATE  |
+---------+--------+--------------------------------------------+-------------+---------+---------+
| bt02    | btrfs  | /var/snap/lxd/common/lxd/disks/bt02.img    |             | 2       | CREATED |
+---------+--------+--------------------------------------------+-------------+---------+---------+

ストレージは消したけど、新規起動できてしまう。

ある意味正しいけどある意味怖い。

lxc launch images:debian/11 d12 --storage=bt02
Creating d12
Starting d12

ストレージが消えたのを反映させる。

ストレージの存在と状態はSQLiteで管理しているらしく、起動にチェックするらしい。 SQLiteを操作して消す以外に方法が見当たらない、

lxd を再起動して、エラーにしてやる。

sudo snap restart lxd

再起動すると UNAVAILABLE にななる。.

 lxc storage list
+---------+--------+--------------------------------------------+-------------+---------+-------------+
|  NAME   | DRIVER |                   SOURCE                   | DESCRIPTION | USED BY |    STATE    |
+---------+--------+--------------------------------------------+-------------+---------+-------------+
| bt02    | btrfs  | /var/snap/lxd/common/lxd/disks/bt02.img    |             | 3       | UNAVAILABLE |
+---------+--------+--------------------------------------------+-------------+---------+-------------+

インスタンスはストレージがないので起動していない。

lxc list
+------+---------+------+------+-----------+-----------+
| NAME |  STATE  | IPV4 | IPV6 |   TYPE    | SNAPSHOTS |
+------+---------+------+------+-----------+-----------+
| d11  | STOPPED |      |      | CONTAINER | 0         |
+------+---------+------+------+-----------+-----------+
| d12  | STOPPED |      |      | CONTAINER | 0         |
+------+---------+------+------+-----------+-----------+

インスタンスを消してみる

lxc delete d12
lxc delete d11

特にエラーなく消せる。

ストレージを一覧から削除する

lxc storage delete bt02

無事消えました。

結論

ストレージ・ファイルを消しても、起動中なら参照は残ってるので、そのまま使える。

再起動すると、ストレージがが見つからいためUNAVAILABLEになる。インスタンスも起動しない。

その状態でインスタンスを消すことはできる。

この方法でbtrfsエラーが出て、消せなくなったコンテナを消すことができるようになった。

インスタンスを直接消す事ができるので、エラーがでたストレージは切り離せませすね。

複数のインスタンスでストレージを使ってる場合は、インスタンスlxc move で移動させておけば、影響なく消せますね。やったね。

btrfs 怖すぎるだろほんと。