Armadilloフォーラム

diskモードに変更できない

t-tanaka

2025年3月10日 17時58分

==========
製品型番:Armadillo-IoT A6E
Debian/ABOSバージョン:3.20.5-at.8
カーネルバージョン:5.10.233-0-at
3G/LTE モジュール情報 (Debianのみ):
その他:
==========
大変お世話になっております。

tmpfsモードの状態でコンテナを起動している状態で、podman commitコマンドを使用してコンテナを保存しました。
その後diskに保存したいため、abos-ctrl podman-storage --diskを実行したところエラーになりました。

diskモードに変更するための対応策はありますでしょうか。
ご多用のところ恐縮ですが、ご確認の程よろしくお願いいたします。

以下、実行時のログになります。
armadillo:~# podman commit test-container test-image:latest
Getting image source signatures
Writing manifest to image destination
a4af99323cc59cfb3c838524cd32d46d69a593b18d3163bac144b19149baaad0
armadillo:~# abos-ctrl podman-storage --disk
This command cannot continue with containers running.
Stop running containers? Unsaved data will be lost! [y/N]
y
283ff882722d3e31a8f491f428ba775995e9c83bf5799183054c3db39339b83e
Containers stopped successfully.
List of images configured on development storage:
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/test-image latest a4af99323cc5 17 minutes ago 486 MB

What should we do? ([C]opy (default), [N]othing, [D]elete)
c
Delete subvolume 294 (no-commit): '/mnt/new_storage'
ERROR: Could not destroy subvolume/snapshot: Directory not empty
ERROR: cannot snapshot '/mnt/boot_0/containers_storage': File exists
ERROR: Could not snapshot readonly storage
ERROR: Rerun abos-ctrl podman-storage if problems arise

コメント

at_dominique.m…

2025年3月10日 19時07分

t-tanakaさん

お世話になっています、
マルティネです。

> tmpfsモードの状態でコンテナを起動している状態で、podman commitコマンドを使用してコンテナを保存しました。
> その後diskに保存したいため、abos-ctrl podman-storage --diskを実行したところエラーになりました。

回答前に、とても分かりにくいですが tmpfs で運用する予定でしたら「abos-ctrl podman-storage」(引数無し)でも tmpfs のままにメモリ上の tmpfs の部分だけがディスクに保存されます。

> Delete subvolume 294 (no-commit): '/mnt/new_storage'
> ERROR: Could not destroy subvolume/snapshot: Directory not empty
> ERROR: cannot snapshot '/mnt/boot_0/containers_storage': File exists
> ERROR: Could not snapshot readonly storage
> ERROR: Rerun abos-ctrl podman-storage if problems arise

こちらの不具合報告ありがとうございます。
ログが少ないですが、原因が分かりましたのでひとまず現状を直してみましょう。

最終的な原因は、podman storage の切り替えの際に app パーティションに一時的な snapshot を作りますが、その一時的な「new_storage」は残ってしまって削除できない状態になりました。

# 操作のため、 appfs を一時的にリマウントします
armadillo:~# mount /dev/mmcblk0p5 /mnt
 
# new_storage下の subvolume をリストします
armadillo:~# btrfs subvol list /mnt | grep new_storage
ID 345 gen 423 top level 5 path new_storage
ID 346 gen 423 top level 345 path new_storage/storage_readonly
 
# 上記コマンドに出力されたボリュームを下からの順番で削除します
armadillo:~# btrfs subvol delete /mnt/new_storage/storage_readonly
Delete subvolume 346 (no-commit): '/mnt/new_storage/storage_readonly'
armadillo:~# btrfs subvol delete /mnt/new_storage
Delete subvolume 345 (no-commit): '/mnt/new_storage'
 
# appfs の一時マウントを解除します
armadillo:~# umount /mnt

こちらの手順を実行した後に podman-storage コマンドを無事に実行できると思います。

また、この状態に至るまでの問題は再現できませんでしたが、もうちょっと見てみます。
確認のため、「btrfs subvol list」コマンドの出力を提供していただければ幸いです。

よろしくお願いします

早々のご返信ありがとうございます。

教えていただいた手順でボリュームを消したところ、diskモードに変更することができました。

> 回答前に、とても分かりにくいですが tmpfs で運用する予定でしたら「abos-ctrl podman-storage」(引数無し)でも tmpfs のままにメモリ上の tmpfs の部分だけがディスクに保存されます。
こちらのコマンド問題なくディスクに保存されることを確認しました。ありがとうございます。

以下、btrfs subvol list /mntのログになります。
armadillo:~# mount /dev/mmcblk0p5 /mnt
[ 6508.186333] /dev/mmcblk0p5: Can't open blockdev
armadillo:~# btrfs subvol list /mnt
ID 256 gen 4419 top level 5 path tmp
ID 258 gen 2424 top level 5 path volumes
ID 260 gen 4419 top level 5 path boot_0/volumes
ID 261 gen 15 top level 5 path boot_1/containers_storage
ID 262 gen 16 top level 5 path boot_1/volumes
ID 264 gen 77 top level 258 path volumes/gw_container/device
ID 266 gen 4419 top level 5 path boot_0/containers_storage
ID 270 gen 4419 top level 5 path new_storage
ID 271 gen 4419 top level 270 path new_storage/containers_storage
armadillo:~# btrfs subvol list /mnt | grep new_storage
ID 270 gen 4419 top level 5 path new_storage
ID 271 gen 4419 top level 270 path new_storage/containers_storage

以上、よろしくお願いいたします。

> t-tanakaさん
>
> お世話になっています、
> マルティネです。
>
>
> > tmpfsモードの状態でコンテナを起動している状態で、podman commitコマンドを使用してコンテナを保存しました。
> > その後diskに保存したいため、abos-ctrl podman-storage --diskを実行したところエラーになりました。
>
> 回答前に、とても分かりにくいですが tmpfs で運用する予定でしたら「abos-ctrl podman-storage」(引数無し)でも tmpfs のままにメモリ上の tmpfs の部分だけがディスクに保存されます。
>
> > Delete subvolume 294 (no-commit): '/mnt/new_storage'
> > ERROR: Could not destroy subvolume/snapshot: Directory not empty
> > ERROR: cannot snapshot '/mnt/boot_0/containers_storage': File exists
> > ERROR: Could not snapshot readonly storage
> > ERROR: Rerun abos-ctrl podman-storage if problems arise
>
> こちらの不具合報告ありがとうございます。
> ログが少ないですが、原因が分かりましたのでひとまず現状を直してみましょう。
>
> 最終的な原因は、podman storage の切り替えの際に app パーティションに一時的な snapshot を作りますが、その一時的な「new_storage」は残ってしまって削除できない状態になりました。
>
>

> # 操作のため、 appfs を一時的にリマウントします
> armadillo:~# mount /dev/mmcblk0p5 /mnt
> 
> # new_storage下の subvolume をリストします
> armadillo:~# btrfs subvol list /mnt | grep new_storage
> ID 345 gen 423 top level 5 path new_storage
> ID 346 gen 423 top level 345 path new_storage/storage_readonly
> 
> # 上記コマンドに出力されたボリュームを下からの順番で削除します
> armadillo:~# btrfs subvol delete /mnt/new_storage/storage_readonly
> Delete subvolume 346 (no-commit): '/mnt/new_storage/storage_readonly'
> armadillo:~# btrfs subvol delete /mnt/new_storage
> Delete subvolume 345 (no-commit): '/mnt/new_storage'
> 
> # appfs の一時マウントを解除します
> armadillo:~# umount /mnt
> 

>
> こちらの手順を実行した後に podman-storage コマンドを無事に実行できると思います。
>
> また、この状態に至るまでの問題は再現できませんでしたが、もうちょっと見てみます。
> 確認のため、「btrfs subvol list」コマンドの出力を提供していただければ幸いです。
>
> よろしくお願いします

at_dominique.m…

2025年3月12日 8時59分

マルティネです。

> 教えていただいた手順でボリュームを消したところ、diskモードに変更することができました。

確認ありがとうございます

> 以下、btrfs subvol list /mntのログになります。

ありがとうございます。
想定どおりの出力なので、今後から発生しないように今月のアップデートで対応します。

よろしくお願いします