toshiki814
2022年4月21日 16時45分
お世話になっております。金田です。
コンテナにファイルを転送していたところ、容量がMAXになってしまったのか、途中でエラーを吐きました。仕方なくコンテナを起動して中のファイルを消そうとしましたが、
podman start コンテナ名 Error: write /var/lib/containers/storage/overlay/metacopy-check373432141/l1/.tmp-f301455944: no space left on device
となってしまい、コンテナを開始できなくなってしまいました。コンテナ自体を消去生としても、
podman rm コンテナ名 Error: write /var/lib/containers/storage/overlay/metacopy-check373432141/l1/.tmp-f301455944: no space left on device
となってしまい、同様のエラーが発生してしまいます。
コンテナ内の./tmpフォルダにあるファイルを消去すれば解決しそうなのですが、方法が分かる方いましたら、助言いただけるとありがたいです。
以下参考
armadillo:/# df -h Filesystem Size Used Avail Use% Mounted on /dev/root 281M 223M 39M 86% / devtmpfs 10M 0 10M 0% /dev tmpfs 333M 840K 332M 1% /run shm 831M 56K 831M 1% /dev/shm cgroup_root 10M 0 10M 0% /sys/fs/cgroup none 831M 56K 831M 1% /etc none 831M 56K 831M 1% /var none 831M 56K 831M 1% /root none 831M 56K 831M 1% /home tmpfs 831M 0 831M 0% /tmp /dev/mmcblk2p3 42M 412K 38M 2% /var/log /dev/mmcblk2p5 6.5G 6.4G 0 100% /var/lib/containers/storage_readonly /dev/mmcblk2p5 6.5G 6.4G 0 100% /var/app/rollback/volumes /dev/mmcblk2p5 6.5G 6.4G 0 100% /var/app/volumes /dev/mmcblk2p5 6.5G 6.4G 0 100% /var/tmp /dev/mmcblk2p5 6.5G 6.4G 0 100% /var/lib/containers/storage /dev/mmcblk2p4 24M 24M 0 100% /opt/firmware
何卒よろしくお願いいたします。
コメント
toshiki814
マルティネ 様
ご返信ありがとうございます。
状況確認として、コマンド出力を添付いたします。
btrfs fi usage /var/tmp Overall: Device size: 6.46GiB Device allocated: 6.46GiB Device unallocated: 1.04MiB Device missing: 0.00B Used: 6.32GiB Free (estimated): 0.00B (min: 0.00B) Free (statfs, df): 0.00B Data ratio: 1.00 Metadata ratio: 2.00 Global reserve: 20.83MiB (used: 0.00B) Multiple profiles: no Data,single: Size:5.93GiB, Used:5.93GiB (100.00%) /dev/mmcblk2p5 5.93GiB Metadata,DUP: Size:267.44MiB, Used:200.38MiB (74.92%) /dev/mmcblk2p5 534.88MiB System,DUP: Size:8.00MiB, Used:16.00KiB (0.20%) /dev/mmcblk2p5 16.00MiB Unallocated: /dev/mmcblk2p5 1.04MiB btrfs balance start -dusage=0 -musage=0 /var/tmp [ 208.449221] BTRFS info (device mmcblk2p5): balance: start -dusage=0 -musage=0 [ 208.457297] BTRFS info (device mmcblk2p5): balance: ended with status: 0 Done, had to relocate 0 out of 15 chunks btrfs balance start -dusage=10 -musage=10 /var/tmp [ 260.496556] BTRFS info (device mmcblk2p5): balance: start -dusage=10 -musage0 [ 260.505110] BTRFS info (device mmcblk2p5): relocating block group 22020096 fp [ 260.528030] BTRFS info (device mmcblk2p5): 1 enospc errors during balance [ 260.534847] BTRFS info (device mmcblk2p5): balance: ended with status: -28 ERROR: error during balancing '/var/tmp': No space left on device There may be more info in syslog - try dmesg | tail
また、値を9~1へ変更した際の出力も添付いたします。
armadillo:~# btrfs balance start -dusage=9 -musage=9 /var/tmp [ 547.506403] BTRFS info (device mmcblk2p5): balance: start -dusage=9 -musage=9 [ 547.514645] BTRFS info (device mmcblk2p5): relocating block group 22020096 fp [ 547.542968] BTRFS info (device mmcblk2p5): 1 enospc errors during balance [ 547.549778] BTRFS info (device mmcblk2p5): balance: ended with status: -28 ERROR: error during balancing '/var/tmp': No space left on device There may be more info in syslog - try dmesg | tail armadillo:~# btrfs balance start -dusage=8 -musage=8 /var/tmp [ 558.223337] BTRFS info (device mmcblk2p5): balance: start -dusage=8 -musage=8 [ 558.231568] BTRFS info (device mmcblk2p5): relocating block group 22020096 fp [ 558.257886] BTRFS info (device mmcblk2p5): 1 enospc errors during balance [ 558.264756] BTRFS info (device mmcblk2p5): balance: ended with status: -28 ERROR: error during balancing '/var/tmp': No space left on device There may be more info in syslog - try dmesg | tail armadillo:~# btrfs balance start -dusage=7 -musage=7 /var/tmp [ 566.356382] BTRFS info (device mmcblk2p5): balance: start -dusage=7 -musage=7 [ 566.364602] BTRFS info (device mmcblk2p5): relocating block group 22020096 fp [ 566.396448] BTRFS info (device mmcblk2p5): 1 enospc errors during balance [ 566.403312] BTRFS info (device mmcblk2p5): balance: ended with status: -28 ERROR: error during balancing '/var/tmp': No space left on device There may be more info in syslog - try dmesg | tail armadillo:~# btrfs balance start -dusage=6 -musage=6 /var/tmp [ 576.708956] BTRFS info (device mmcblk2p5): balance: start -dusage=6 -musage=6 [ 576.717257] BTRFS info (device mmcblk2p5): relocating block group 22020096 fp [ 576.746776] BTRFS info (device mmcblk2p5): 1 enospc errors during balance [ 576.753591] BTRFS info (device mmcblk2p5): balance: ended with status: -28 ERROR: error during balancing '/var/tmp': No space left on device There may be more info in syslog - try dmesg | tail armadillo:~# btrfs balance start -dusage=5 -musage=5 /var/tmp [ 588.224155] BTRFS info (device mmcblk2p5): balance: start -dusage=5 -musage=5 [ 588.232434] BTRFS info (device mmcblk2p5): relocating block group 22020096 fp [ 588.268429] BTRFS info (device mmcblk2p5): 1 enospc errors during balance [ 588.275299] BTRFS info (device mmcblk2p5): balance: ended with status: -28 ERROR: error during balancing '/var/tmp': No space left on device There may be more info in syslog - try dmesg | tail armadillo:~# btrfs balance start -dusage=4 -musage=4 /var/tmp [ 597.938506] BTRFS info (device mmcblk2p5): balance: start -dusage=4 -musage=4 [ 597.946728] BTRFS info (device mmcblk2p5): relocating block group 22020096 fp [ 597.975755] BTRFS info (device mmcblk2p5): 1 enospc errors during balance [ 597.982565] BTRFS info (device mmcblk2p5): balance: ended with status: -28 ERROR: error during balancing '/var/tmp': No space left on device There may be more info in syslog - try dmesg | tail armadillo:~# btrfs balance start -dusage=3 -musage=3 /var/tmp [ 605.535578] BTRFS info (device mmcblk2p5): balance: start -dusage=3 -musage=3 [ 605.543867] BTRFS info (device mmcblk2p5): relocating block group 22020096 fp [ 605.568616] BTRFS info (device mmcblk2p5): 1 enospc errors during balance [ 605.575485] BTRFS info (device mmcblk2p5): balance: ended with status: -28 ERROR: error during balancing '/var/tmp': No space left on device There may be more info in syslog - try dmesg | tail armadillo:~# btrfs balance start -dusage=2 -musage=2 /var/tmp [ 614.014281] BTRFS info (device mmcblk2p5): balance: start -dusage=2 -musage=2 [ 614.022489] BTRFS info (device mmcblk2p5): relocating block group 22020096 fp [ 614.052519] BTRFS info (device mmcblk2p5): 1 enospc errors during balance [ 614.059329] BTRFS info (device mmcblk2p5): balance: ended with status: -28 ERROR: error during balancing '/var/tmp': No space left on device There may be more info in syslog - try dmesg | tail armadillo:~# btrfs balance start -dusage=1 -musage=1 /var/tmp [ 623.509519] BTRFS info (device mmcblk2p5): balance: start -dusage=1 -musage=1 [ 623.517725] BTRFS info (device mmcblk2p5): relocating block group 22020096 fp [ 623.549693] BTRFS info (device mmcblk2p5): 1 enospc errors during balance [ 623.556506] BTRFS info (device mmcblk2p5): balance: ended with status: -28 ERROR: error during balancing '/var/tmp': No space left on device There may be more info in syslog - try dmesg | tail
状況がつかみ切れておらず、頼り切りになってしまいますが、
ご指導の程、何卒よろしくお願いいたします。
at_dominique.m…
金田さん
> btrfs fi usage /var/tmp > Data,single: Size:5.93GiB, Used:5.93GiB (100.00%) > /dev/mmcblk2p5 5.93GiB > > Metadata,DUP: Size:267.44MiB, Used:200.38MiB (74.92%) > /dev/mmcblk2p5 534.88MiB
あれ?ファイルの削除できないと聞いた時にmetadataの方が100%だと思っていましたが、そうでもなかったんですね…
申し訳ございません、エラーを読み間違いました。btrfsの難しい「ファイルを削除できなくなる」問題ではなく、ただpodmanがファイルを削除するには一時的なファイルを書く必要があります。失礼しました。
ファイルの削除は podman を使わなければできると思いますので、削除できるファイルを探しましょう。
まず、/var/tmp/ に一時的なデータが残っていたらけしていいと思いますので、把握してから消してみましょう。
armadlilo# cd /var/tmp armadillo# du -hs * # ここでお客さんにとって重要なデータがないことを確認してください。podmanの一時的なデータは「podman<数字列>」と「storage<数字列>」であれば安全に消せます。 armadillo# rm -rf *
ここからは三つのパターンあるので、説明がややこしいですが。。。
* エラーあったら、ここで止めて、やはりbtrfsで削除できなくなった状態になったので、昨日考えた手順を説明しますのでまた聞いてください。
* ファイルがあって、削除できたらpodman rmを再び使えるようになったはずですので、そちらで消してください。
* ファイルがなかったら(かたりなかったら)、別のところで探す必要があるので、一般的な説明が難しくなります。 一番考えるのは、「podman ps -a」でコンテナが表示されて、そのなかにファイルがあったら、podman rmで削除されるはずのデータを手動で見つけて消すぐらいですが、ただいま試して再現できなかったのでどこまで使えるかは不明です…その場合に以下のコマンドの出力をお願いできますでしょうか?
armadillo# podman ps -a armadillo:/var/tmp# podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5164786c3453 k8s.gcr.io/pause:3.5 15 minutes ago Up 15 minutes ago cfb43e236bef-infra 1dd4a3296e2d localhost/xwayland:latest sh -c trap exit T... 15 minutes ago Up 15 minutes ago xwayland 155bd60aefd8 docker.io/library/alpine:latest ls 2 minutes ago Exited (0) 2 minutes ago youthful_swanson cc9094f5cf99 docker.io/library/alpine:latest touch /foo About a minute ago Exited (0) About a minute ago test # ここでどれでもいいので、NAMESのところの一つを使って<podman mount xxx>を実行してください armadillo# podman mount test /var/lib/containers/storage/overlay/4c52a43b2bed1ab428448469af5d92587de5b7c0d90166ff3dd5c9ac373152ce/merged # これができたら、そのパスの ../diffにファイルがあればそちらを消すことはできるはずです。例えば、 armadillo# cd /var/lib/containers/storage/overlay/4c52a43b2bed1ab428448 469af5d92587de5b7c0d90166ff3dd5c9ac373152ce/merged/../diff armadillo# ls etc foo run armadillo# rm -rf foo
お手数をかけしますが、よろしくお願いします。
toshiki814
マルティネ 様
素早いご対応ありがとうございます。
実行した順に記述していきます。
armadillo:/# cd /var/tmp armadillo:/var/tmp# du -hs * du: cannot access '*': No such file or directory armadillo:/var/tmp# dir armadillo:/var/tmp#
恐らくファイルが無い状態であると思いますので、次に移ります。
armadillo:/var/tmp# podman ps -a Error: write /var/lib/containers/storage/overlay/metacopy-check453525954/l1/.tme armadillo:/var/tmp# podman mount コンテナ名 Error: write /var/lib/containers/storage/overlay/metacopy-check238269200/l1/.tme
podmanのコマンドは全てエラーが出てしまい、コンテナ一覧を表示したり、マウントすることができず、podman rm で消去されるファイルを消すことができませんでした。
申し訳ありませんが、何卒よろしくお願いします。
at_dominique.m…
金田さん
> 恐らくファイルが無い状態であると思いますので、次に移ります。
そうですね、あったら便利でしたが…
podman_switch_storage --disk を行ったので、ボリューム(/var/app/volumesか/var/app/rollback/volumes) も使ってませんですね?
> armadillo:/var/tmp# podman ps -a > Error: write /var/lib/containers/storage/overlay/metacopy-check453525954/l1/.tme > armadillo:/var/tmp# podman mount コンテナ名 > Error: write /var/lib/containers/storage/overlay/metacopy-check238269200/l1/.tme
> podmanのコマンドは全てエラーが出てしまい、コンテナ一覧を表示したり、マウントすることができず、podman rm で消去されるファイルを消すことができませんでした。
マウントができないじゃないかと思っていましたが、やはりそうなりますね。
(想定の運用をswupdateでコンテナをreadonlyな場所でインストールや更新しますので、その場合に対応が簡単になりますが、podmanがぞこまで使い辛くなると思ってませんでした…)
どうしましょうか…
/var/lib/containers/storage/overlay/ を手探りでさがしたらどうにかなるかもしれませんが、一時的なデータだけではなくコンテナのイメージも含まれてますので、間違ったらコンテナを起動できなくなる可能性もあります。
それは避けたいですね。
やはり、「一時的にappfsを大きくする」方向で直しましょうか。
Armadillo Base OSでは、A/Bインストールで常に眠ってる小さなパティションがありますので、それを使います。
まず、自動アップデートが有効の場合に無効にします。アップデートが起きたら、せっかく直しているコンテナのファイルシステムが壊れますので:
armadillo:~# rc-service swupdate-url stop swupdate-url | * Stopping swupdate-url ... [ ok ] armadillo:~# rc-service swupdate-hawkbit stop swupdate-hawkbit | * WARNING: swupdate-hawkbit is already stopped
現在起動しているパティションを確認します。最新のバージョンを使っていたら 「abos-ctrl status」で、古いバージョンの場合に「swupdate -g」で確認してください。 mmcblk2p1 か mmcblk2p2 なはずです。
armadillo:~# abos-ctrl status Currently booted on /dev/mmcblk2p1 rollback-status: optimal armadillo:~# swupdate -g /dev/mmcblk2p1
このパティションを覚えて、もう一つのパティションをbtrfsに足します。今の例では、statusではmmcblk2p1でしたので、mmcblk2p2を使います。逆の場合にmmcblk2p1を使ってください。間違ってもエラーしますので、安心して実行してください。
armadillo:~# btrfs dev add -f /dev/mmcblk2p2 /var/tmp Performing full device TRIM /dev/mmcblk2p2 (300.00MiB) ... armadillo:~# df -h /var/tmp Filesystem Size Used Avail Use% Mounted on /dev/mmcblk2p5 6.8G 6.4G 300M 96% /var/tmp
そうしたら、少し余裕ができたので、podman rmのコマンドが再びできると思いますが、どうでしょうか?
今の段階でpodman rmやpodman rmi (image rm) でファイルを削除してください。
削除し終わったら、そのパティションをまた Armadillo Base OS に返します。
armadillo:~# btrfs device usage /var/tmp /dev/mmcblk2p5, ID: 1 Device size: 6.46GiB Device slack: 3.50KiB Data,single: 5.89GiB Metadata,DUP: 524.00MiB System,DUP: 64.00MiB Unallocated: 1.04MiB /dev/mmcblk2p2, ID: 2 Device size: 300.00MiB Device slack: 0.00B Data,single: 299.00MiB Unallocated: 1.00MiB armadillo:~# btrfs device remove /dev/mmcblk2p2 /var/tmp armadillo:~# btrfs device usage /var/tmp /dev/mmcblk2p5, ID: 1 Device size: 6.46GiB Device slack: 3.50KiB Data,single: 5.89GiB Metadata,DUP: 524.00MiB System,DUP: 64.00MiB Unallocated: 1.04MiB
これで手順が終わります(自動アップデートがあった場合は、再起動したらまた実行されます)。
何か問題あったら、何もせずにまた聞いてください。
よろしくお願いします。
toshiki814
マルティネ 様
> podman_switch_storage --disk を行ったので、ボリューム(/var/app/volumesか/var/app/rollback/volumes) も使ってませんですね?
はい。ファイルが無い状態で、恐らく使っていないと思います。
以下、実行していった順に記述します。
armadillo:/# rc-service swupdate-url stop swupdate-url | * WARNING: swupdate-url is already stopped armadillo:/# rc-service swupdate-hawkbit stop swupdate-hawkbit | * WARNING: swupdate-hawkbit is already stopped armadillo:/# abos-ctrl status -ash: abos-ctrl: not found armadillo:/# swupdate -g mmcblk2p1
armadillo:/# btrfs dev add -f /dev/mmcblk2p2 /var/tmp [13710.578025] BTRFS info (device mmcblk2p5): disk added /dev/mmcblk2p2
armadillo:/# podman rm コンテナ名 dbc2ab6377875645e8a938bb13771a448d88bde988950338d2de15f605915dc0 armadillo:/# btrfs device usage /var/tmp /dev/mmcblk2p5, ID: 1 Device size: 6.46GiB Device slack: 3.50KiB Data,single: 5.93GiB Metadata,DUP: 534.88MiB System,DUP: 16.00MiB Unallocated: 1.04MiB /dev/mmcblk2p2, ID: 2 Device size: 300.00MiB Device slack: 0.00B Data,single: 299.00MiB Unallocated: 1.00MiB
armadillo:/# btrfs device remove /dev/mmcblk2p2 /var/tmp [13860.111749] BTRFS info (device mmcblk2p5): relocating block group 8074559488a [13860.193018] BTRFS info (device mmcblk2p5): found 20 extents, stage: move dats [13860.860139] BTRFS info (device mmcblk2p5): found 20 extents, stage: update ds [13861.028334] BTRFS info (device mmcblk2p5): device deleted: /dev/mmcblk2p2 armadillo:/# btrfs device usage /var/tmp /dev/mmcblk2p5, ID: 1 Device size: 6.46GiB Device slack: 3.50KiB Data,single: 5.93GiB Metadata,DUP: 534.88MiB System,DUP: 16.00MiB Unallocated: 1.04MiB
結果として、podman rm コンテナ名 のコマンドが実行でき、無事解決することができました。
素早いご返信と対応、素晴らしかったです。
本当にありがとうございました。
at_dominique.m…
at_dominique.m…
2022年4月21日 17時32分
金田さん、
お世話になっています、アットマークテクノのマルティネです。
app のファイルシステムに btrfs を使っていて、特集な仕様でファイルを消すとしても削除の命令を書き込むスペースが必要です。
その仕様で電源落とす時に壊れにくくなりますが、100%になると厄介ですね。
本来であれば「GlobalReserve」の予約で何とかなるはずですが…
対応がいくつかあって、いずれマニュアルに載せないといけないと思いますが、とりあえず状況確認をお願いいただけますか?
以下のコマンドの出力をこちらに張っていただけると助かります。balanceのコマンドで失敗しても大丈夫です。
この時点で、balanceが何か効果があった場合にファイルを削除できるようになったと思いますが、恐らく何もできない状態のままです。
10でエラーが出た場合に一つずつ下げて、10で何もしていない場合(「had to relocate 0 out of」メッセージ)に一つずつ上げることでいずれ削除できるようになるかエラーします。
その一番小さい数字でもエラーする場合に、一時的に容量を上げて、ファイルを削除してから綺麗に容量をまた外すことで解決できますが、説明がながくなりますのでとりあえずbalanceだけを試してみましょう。
よろしくお願いします。