Armadilloフォーラム

コンテナ稼働時にno space left on deviceとなりその後操作不能になる件につきまして

yuki.shigefuji

2023年11月8日 15時50分

お世話になっております。

表題の件にて物体検出と画像分類を実施し、状態に応じて動画として保持するPGを動作させている。
この時動画保存先のSDカードはまだ容量が半分以上残っているにも拘らずコンテナ起動時や操作時にno space left on deviceとなり起動に失敗したり
起動はされるがno space left on deviceの表記が表示されてしまう状況が起きている。

これらの要因、又は対処法、過去の事例などがあればご教授願いたいです。

コメント

at_dominique.m…

2023年11月8日 16時02分

yuki.shigefujiさん

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

> 表題の件にて物体検出と画像分類を実施し、状態に応じて動画として保持するPGを動作させている。
> この時動画保存先のSDカードはまだ容量が半分以上残っているにも拘らずコンテナ起動時や操作時にno space left on deviceとなり起動に失敗したり
> 起動はされるがno space left on deviceの表記が表示されてしまう状況が起きている。

いくつかを確認させてください:
* 動画を SD に保存しているそうですが、何が no space left on device になっているかが不明なので、「df -h」の出力を提供していただけますでしょうか。他のファイルシステムが問題になっている可能性があります。
* コンテナのストレージはどういう設定になっていますか?「abos-ctrl podman-storage --status」で確認できます。
* 「no space left on device」はどこで表示されてますか?(コンテナの起動時に表示されているか、podman logs でコンテナの出力で表示されていますか)

よろしくお願いします。

yuki.shigefuji

2023年11月13日 15時02分

お世話になっております。

1:df -h ログは下記になります
Filesystem Size Used Avail Use% Mounted on
/dev/root 272M 205M 48M 82% /live/rootfs
devtmpfs 10M 0 10M 0% /dev
tmpfs 334M 8.9M 325M 3% /run
shm 835M 84K 835M 1% /dev/shm
tmpfs 835M 0 835M 0% /tmp
/dev/mmcblk2p3 42M 2.5M 36M 7% /var/log
/dev/mmcblk2p5 9.1G 3.3G 5.5G 37% /var/lib/containers/storage_readonly
/dev/mmcblk2p5 9.1G 3.3G 5.5G 37% /var/app/rollback/volumes
/dev/mmcblk2p5 9.1G 3.3G 5.5G 37% /var/app/volumes
/dev/mmcblk2p5 9.1G 3.3G 5.5G 37% /var/tmp
/dev/mmcblk2gp1 8.0M 2.0K 8.0M 1% /var/at-log
/dev/mmcblk2p4 20M 20M 0 100% /opt/firmware
/dev/mmcblk2p5 9.1G 3.3G 5.5G 37% /var/lib/containers/storage
none 835M 48K 835M 1% /live
none 835M 48K 835M 1% /
shm 63M 0 63M 0% /var/lib/containers/storage/overlay-containers/191733d064538a09f1a0334aa5a67ae6052d3dee5260f88a9867a137ff8dad1a/userdata/shm
overlay 9.1G 3.3G 5.5G 37% /var/lib/containers/storage/overlay/a3e07d00731bb86cbc498c445fbcb216a847185228cf714d8121e3a4c0ed6dda/merged

2:abos-ctrl podman-storage --status コマンドの出力は下記になります
Currently in disk mode, run with --tmpfs to switch

3:no space left on device の表示箇所について
①podman images 含むpodmanコマンド入力時
②操作不能にならず警告のみ頻出する
以上2パターンが確認されています。

> yuki.shigefujiさん
>
> お世話になっています、
> マルティネです。
>
> > 表題の件にて物体検出と画像分類を実施し、状態に応じて動画として保持するPGを動作させている。
> > この時動画保存先のSDカードはまだ容量が半分以上残っているにも拘らずコンテナ起動時や操作時にno space left on deviceとなり起動に失敗したり
> > 起動はされるがno space left on deviceの表記が表示されてしまう状況が起きている。
>
> いくつかを確認させてください:
> * 動画を SD に保存しているそうですが、何が no space left on device になっているかが不明なので、「df -h」の出力を提供していただけますでしょうか。他のファイルシステムが問題になっている可能性があります。
> * コンテナのストレージはどういう設定になっていますか?「abos-ctrl podman-storage --status」で確認できます。
> * 「no space left on device」はどこで表示されてますか?(コンテナの起動時に表示されているか、podman logs でコンテナの出力で表示されていますか)
>
> よろしくお願いします。

at_dominique.m…

2023年11月13日 15時49分

yuki.shigefujiさん

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

回答ありがとうございます。

> 3:no space left on device の表示箇所について
> ①podman images 含むpodmanコマンド入力時
> ②操作不能にならず警告のみ頻出する
> 以上2パターンが確認されています。

podman images 等でも、ロックファイルを作ってますのでディスクモードでは /run か /var/lib/containers/storage の問題になりそうですが、/run に問題が無さそうなのでお手数ですが appfs の追加確認をお願いします。
以下のコマンドの出力も提供していただけますか?

btrfs device usage /var/tmp

おそらくですが、Data の部分に余裕があって、 Metadata の方が 100% で「Device unallocated」が 0 になっていると思います(以下のように)

Overall:
    Device size:		   6.46GiB
    Device allocated:		   6.46GiB
    Device unallocated:		   1.04MiB <--- ここが 0 に近い
    Device missing:		     0.00B
    Device slack:		   3.50KiB
    Used:			   6.12GiB
    Free (estimated):		   4.00KiB	(min: 4.00KiB)
    Free (statfs, df):		   4.00KiB
    Data ratio:			      1.00
    Metadata ratio:		      2.00
    Global reserve:		   8.34MiB	(used: 0.00B)
    Multiple profiles:		        no
 
Data,single: Size:5.95GiB, Used:4.92GiB (82.65%)
   /dev/mmcblk2p5	   5.95GiB
 
Metadata,DUP: Size:256.00MiB, Used:256.00MiB (100%) <-- ここが 100%
   /dev/mmcblk2p5	 512.00MiB
 
System,DUP: Size:8.00MiB, Used:16.00KiB (0.20%)
   /dev/mmcblk2p5	  16.00MiB
 
Unallocated:
   /dev/mmcblk2p5	   1.04MiB <-- ここも 0 に近い

その場合は https://armadillo.atmark-techno.com/forum/armadillo/11746 に書いた説明の様に容量を取り戻せます。
(btrfs balance start -dusage=0 -musage=0 /var/tmp から一つずつusage の値を上げて、それでダメでしたら一時的に ABOS の B面を追加して balance を再び実行して B面を取り外す)
かなりややっこしいので、何か不明な点があれば実行する前に聞いてください。確認ができたらもう一度説明します。

お手数ですがよろしくお願いします

yuki.shigefuji

2023年11月13日 17時43分

お世話になっております。

実行の結果は以下になります。
/home/atmark # btrfs device usage /var/tmp
/dev/mmcblk2p5, ID: 1
Device size: 9.00GiB
Device slack: 3.50KiB
Data,single: 8.49GiB
Metadata,DUP: 512.00MiB
System,DUP: 16.00MiB
Unallocated: 1.04MiB

過去の記事の対策ですが、これは手動削除による一時的な対処だと思うのですが容量が限界になった際には毎回手動で消さなくてはいけないのでしょうか。
自動的に消す手段が確立されている場合ご教授いただけると助かります。

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

> yuki.shigefujiさん
>
> お世話になっています、
> マルティネです。
>
> 回答ありがとうございます。
>
> > 3:no space left on device の表示箇所について
> > ①podman images 含むpodmanコマンド入力時
> > ②操作不能にならず警告のみ頻出する
> > 以上2パターンが確認されています。
>
> podman images 等でも、ロックファイルを作ってますのでディスクモードでは /run か /var/lib/containers/storage の問題になりそうですが、/run に問題が無さそうなのでお手数ですが appfs の追加確認をお願いします。
> 以下のコマンドの出力も提供していただけますか?
>

> btrfs device usage /var/tmp
> 

>
> おそらくですが、Data の部分に余裕があって、 Metadata の方が 100% で「Device unallocated」が 0 になっていると思います(以下のように)
>

> Overall:
>     Device size:		   6.46GiB
>     Device allocated:		   6.46GiB
>     Device unallocated:		   1.04MiB <--- ここが 0 に近い
>     Device missing:		     0.00B
>     Device slack:		   3.50KiB
>     Used:			   6.12GiB
>     Free (estimated):		   4.00KiB	(min: 4.00KiB)
>     Free (statfs, df):		   4.00KiB
>     Data ratio:			      1.00
>     Metadata ratio:		      2.00
>     Global reserve:		   8.34MiB	(used: 0.00B)
>     Multiple profiles:		        no
> 
> Data,single: Size:5.95GiB, Used:4.92GiB (82.65%)
>    /dev/mmcblk2p5	   5.95GiB
> 
> Metadata,DUP: Size:256.00MiB, Used:256.00MiB (100%) <-- ここが 100%
>    /dev/mmcblk2p5	 512.00MiB
> 
> System,DUP: Size:8.00MiB, Used:16.00KiB (0.20%)
>    /dev/mmcblk2p5	  16.00MiB
> 
> Unallocated:
>    /dev/mmcblk2p5	   1.04MiB <-- ここも 0 に近い
> 

>
> その場合は https://armadillo.atmark-techno.com/forum/armadillo/11746 に書いた説明の様に容量を取り戻せます。
> (btrfs balance start -dusage=0 -musage=0 /var/tmp から一つずつusage の値を上げて、それでダメでしたら一時的に ABOS の B面を追加して balance を再び実行して B面を取り外す)
> かなりややっこしいので、何か不明な点があれば実行する前に聞いてください。確認ができたらもう一度説明します。
>
> お手数ですがよろしくお願いします

at_dominique.m…

2023年11月14日 10時11分

yuki.shigefujiさん

マルティネです。

> 実行の結果は以下になります。
> /home/atmark # btrfs device usage /var/tmp

申し訳ございません、btrfs コマンドでオプションが多くて、「btrfs filesystem usage /var/tmp」のつもりで device を書いてしまいました…そのコマンドも確認お願いできますでしょうか? device usage の方では実際に消費されている容量が表示されていないので、確認として足りません。

> 過去の記事の対策ですが、これは手動削除による一時的な対処だと思うのですが容量が限界になった際には毎回手動で消さなくてはいけないのでしょうか。
> 自動的に消す手段が確立されている場合ご教授いただけると助かります。

そうですね…こうなってしまったら自動復帰は不可能だと思いますが、btrfs としてはバックグラウンドですでに自動的に最適化の処理が入っていて、そこまで悪化するはずがないですよね。(昔のカーネル 4.x の btrfs のころはよく起きていた問題で、今 ABOS で使っているカーネルではfilesystem usageで表示されている「Global reserve」で回避されているはずです。実際、私がそれを再現しようとしてもまだできてません…容量をすべて消費してもファイルを削除すれば再び普通に使えるようになります。行っている処理によりますので、もう少し確認しているところですが、確認した範囲では正常にファイルの削除で global reserve を使って復帰しています。)

ですが、そこまでになったのは podman storage を --disk で使用しているのは大きいと考えています。
こういう問題だけではなく、disk モードで電源が落ちるとコンテナの故障にも繋がりますので、tmpfs モードで運用することを強く推奨しています。
そのモードでしたら、書き込んであるファイルは二つしかないので、対応はできます:
* 自分で add_volumes で使用しているディレクトリ。そこにファイルを書きすぎて容量を越えた場合は削除すればいいです。
* アップデートの際(か abos-ctrl podman-rw コマンド)で書き込んでいるコンテナイメージ。失敗した後に再びコマンドを実行すると失敗した subvolume が削除されますので、その際も解決されるはずです。
一方、disk モードの場合は簡単にコンテナの領域を制御できなくなりますので、「ファイルを削除する」とだけ言っても対応が困難ですので、イメージ書込み中に失敗した際の復帰は複雑になります。

なお、tmpfs モードでは容量オーバーでもコンテナの起動に影響ありませんので、アプリケーションが書込みのエラーを対応できていればサービスを維持することも可能です。

大変お手数ですが、引続きの確認をよろしくお願いします。

yuki.shigefuji

2023年11月14日 10時35分

お世話になっております。

出力を追記いたします。

Overall:
    Device size:                   9.00GiB
    Device allocated:              9.00GiB
    Device unallocated:            1.04MiB
    Device missing:                  0.00B
    Device slack:                  3.50KiB
    Used:                          3.56GiB
    Free (estimated):              5.10GiB      (min: 5.10GiB)
    Free (statfs, df):             5.10GiB
    Data ratio:                       1.00
    Metadata ratio:                   2.00
    Global reserve:                8.91MiB      (used: 0.00B)
    Multiple profiles:                  no
 
Data,single: Size:8.49GiB, Used:3.39GiB (39.94%)
   /dev/mmcblk2p5          8.49GiB
 
Metadata,DUP: Size:256.00MiB, Used:86.31MiB (33.72%)
   /dev/mmcblk2p5        512.00MiB
 
System,DUP: Size:8.00MiB, Used:16.00KiB (0.20%)
   /dev/mmcblk2p5         16.00MiB
 
Unallocated:
   /dev/mmcblk2p5          1.04MiB

tmpfsへの切り替えの件承知いたしました。
ちなみにこちらは切り替えた際にtmpfsでは一時ファイルとされる物はdiskで既に残っている場合手動で削除する必要はありますか?

ご確認よろしくお願いいたします。

at_dominique.m…

2023年11月14日 10時58分

yuki.shigefujiさん、

早速の回答ありがとうございます。

>     Global reserve:                8.91MiB      (used: 0.00B)
> Data,single: Size:8.49GiB, Used:3.39GiB (39.94%)
> Metadata,DUP: Size:256.00MiB, Used:86.31MiB (33.72%)
> System,DUP: Size:8.00MiB, Used:16.00KiB (0.20%)

この出力で問題なさそうですが、すでに容量を取り戻して podman image でエラーが出力されなくなったというわけではないですね?
すみません、これ以外考えれなかったので勘違いしていましたが、btrfs に問題が無かったらしいです。

「no space left on device」のメッセージは「podman image list」などを実行する度に毎回表示されますか?
毎回表示された場合に解析のためのコマンドを追加でお願いしますので、その時はよろしくお願いします。
されない場合は何か表示される条件の心当たりがあれば助かります。

どのみち、tmpfs モードでの運用の推奨に代わりがないですし、おそらくそれでこの不具合が解決されると思いますが、解析を続くかどうかの判断もお任せします。個人的には気になりますが、問題としてはそれで解決されますので理由を確認しなくても困ることはありません。

> tmpfsへの切り替えの件承知いたしました。
> ちなみにこちらは切り替えた際にtmpfsでは一時ファイルとされる物はdiskで既に残っている場合手動で削除する必要はありますか?

podman のストレージに関しては何もする必要がありません。
tmpfs モードでもイメージ自体が eMMC に保存されるままなので、切り替える際に一時的なデーターだけを削除してイメージを移動しているだけですが、後ほどのアップデートでイメージを入れ替えた際に古いイメージがちゃんと削除されるようになります。

よろしくお願いします。