Armadilloフォーラム

podman loadでコンテナイメージロード中に電源断した後、再度podman loadしたときにエラーになる

h-yuusuke

2022年8月19日 16時13分

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

掲題の件、下記の手順を実施していたのですが、手順③で「Error: payload does not match any of the supported image formats (oci, oci-archive, dir, docker-archive)」というエラーが生じてコンテナイメージのロードに失敗してしまいます。
原因や解決策等をご存知でしたらご教示いただけないでしょうか。

●実施手順
①「podman load -i testcontainer.tar」コマンドを実行してコンテナイメージ"testcontainer"のロードを実行
② ①のコンテナイメージのロード中にArmadillo-IOT G4の電源ケーブルを抜いて電源断する
③ 電源投入後、再度「podman load -i testcontainer.tar」コマンドを実行してコンテナイメージ"testcontainer"のロードを実行

※手順③実施前にpodman imagesコマンドで"testcontainer"が存在しないことを確認しております。
※dfコマンドでパーティションの空き容量は十分あることは確認できております。

コメント

at_dominique.m…

2022年8月19日 16時34分

h-yuusukeさん、

> 掲題の件、下記の手順を実施していたのですが、手順③で「Error: payload does not match any of the supported image formats (oci, oci-archive, dir, docker-archive)」というエラーが生じてコンテナイメージのロードに失敗してしまいます。
> 原因や解決策等をご存知でしたらご教示いただけないでしょうか。
>
> ●実施手順
> ①「podman load -i testcontainer.tar」コマンドを実行してコンテナイメージ"testcontainer"のロードを実行
> ② ①のコンテナイメージのロード中にArmadillo-IOT G4の電源ケーブルを抜いて電源断する
> ③ 電源投入後、再度「podman load -i testcontainer.tar」コマンドを実行してコンテナイメージ"testcontainer"のロードを実行
>
> ※手順③実施前にpodman imagesコマンドで"testcontainer"が存在しないことを確認しております。
> ※dfコマンドでパーティションの空き容量は十分あることは確認できております。

いくつかのタイミングで再現しようとしましたができなかったので、質問させてください。

* testcontainer.tar はどうやって Armadillo に搭載されましたか?USBメモリでしたら問題になりませんが、例えば /var/app/volumes にコピーしてからロードするような手順であれば電源を切るときにこのファイルが壊れる可能性もあります。ファイルの確認をお願いします。確認できなかったら、「tar tf testcontainer.tar」を実行してその内容を見せてもらえますか。
* 「Error: payload does not match any of the supported image formats」は最後に出るエラーですが、その前にいくつかのエラーメッセージがあるはずです。 podman load のコマンド実行からすべてのログを添付して提供してもらえますか?(ファイル名を隠しても構いません)

よろしくお願いします。

> * testcontainer.tar はどうやって Armadillo に搭載されましたか?USBメモリでしたら問題になりませんが、例えば /var/app/volumes にコピーしてからロードするような手順であれば電源を切るときにこのファイルが壊れる可能性もあります。ファイルの確認をお願いします。確認できなかったら、「tar tf testcontainer.tar」を実行してその内容を見せてもらえますか。

/var/app/volumesに作成したディレクトリにコピーしてからロードしております。
ファイルを一度削除し再度コピーしてからpodman loadを実行してみましたが、それでもエラーとなりました。

> * 「Error: payload does not match any of the supported image formats」は最後に出るエラーですが、その前にいくつかのエラーメッセージがあるはずです。 podman load のコマンド実行からすべてのログを添付して提供してもらえますか?(ファイル名を隠しても構いません)

「tar tf testcontainer.tar」を実行した結果と「podman load」コマンド実行時のログを添付いたします。

ファイル ファイルの説明
podman_load_実行結果.txt
tar_tf_実行結果.txt

at_dominique.m…

2022年8月22日 13時48分

h-yuusukeさん、

返事が遅くなりました。マルティネです。

> /var/app/volumesに作成したディレクトリにコピーしてからロードしております。
> ファイルを一度削除し再度コピーしてからpodman loadを実行してみましたが、それでもエラーとなりました。

確認ありがとうございます。ファイルリストもみて、問題なさそうですね。

> > * 「Error: payload does not match any of the supported image formats」は最後に出るエラーですが、その前にいくつかのエラーメッセージがあるはずです。 podman load のコマンド実行からすべてのログを添付して提供してもらえますか?(ファイル名を隠しても構いません)
>
> 「tar tf testcontainer.tar」を実行した結果と「podman load」コマンド実行時のログを添付いたします。

ログもありがとうございました。他のエラーはないですね…コンテナの層をすべてコピーし終わったら急に何か気に障るところはどこかにありますが、教えてくれないのは困りますね。
こちらでもう少し再現できないか試してみましたが、手元のイメージでは再現できなさそうです。最後に、Armadillo Base OS のバージョンを教えてもらえますか? 「cat /etc/atmark-release」で表示できます。

「abos-ctrl podman-storage --disk」(または「podman_switch_storage --disk」)ではこう種類の podman のバグがあることは分かっていますので、改めて運用の時に2面化でコンテナのストレージを使ってください。swu でのコンテナの更新、あれば「abos-ctrl podman-storage」のコピー機能での操作であれば安全に使えます。(今回の話で、今月のアップデートに 「abos-ctrl podman-rw」も2面化をさせるように改善します)

注意をさておき、本件の解決としては:
* 他のコンテナがなければ、podman のストレージの初期化をおすすめします。コンテナを停止して「abos-ctrl podman-storage --tmpfs --cleanup」を実行すれば、eMMC の podman のストレージが消されますので再び「abos-ctrl podman-storage --disk」で eMMC の保存に戻れば問題なくロードできるようになると思います。
* コンテナのイメージを保存する必要があれば、base OS のバージョンによって「abos-ctrl podman-storage --tmpfs --cleanup=copy」を使えるかもしれません。エラーする場合にあらかじめ 「podman image save」などでファイルとして保存して、削除の後に再びロードしてください。

解決としては気持ち悪いですが、再現できない以上に解析が時間かかりそうなのでこれで作業を再開できると思います。

よろしくお願いします。

マルティネ様
ご回答ありがとうございます。

>最後に、Armadillo Base OS のバージョンを教えてもらえますか?
事象が発生したArmadilloのBase OSバージョンは下記でした。

# cat /etc/atmark-release
3.15.3-at.4

追加の質問となってしまいますが、Armadillo Base OSのバージョンによって発生する/しないが変わることはありえますでしょうか。

at_dominique.m…

2022年8月24日 17時19分

h-yuusukeさん

> 3.15.3-at.4

了解しました。
ちょっと時間がかかりますが来週、このバージョンをインストールしなおしてこのバージョンで再現してみます。

> 追加の質問となってしまいますが、Armadillo Base OSのバージョンによって発生する/しないが変わることはありえますでしょうか。

はい。
Armadillo Base OS 3.15系のバージョンでは podman 3.4 を使用していましたが、6月にリリースされた 3.16 のアップデートで podman 4.1 になりました。この問題はすでに解決されて私の環境で再現できなくなっていた可能性も充分にあります。

baseos に搭載されているパッケージリストは以下にあります:
https://armadillo.atmark-techno.com/files/downloads/armadillo-iot-g4/ba…
https://armadillo.atmark-techno.com/files/downloads/armadillo-iot-g4/ba…

今回の件での問題は podman のストレージを直接に eMMC上で運用している問題です。ある程度の問題がすでに podman の開発者に報告して、解決してもらいましたが残ってる問題はあるかもしれません。
その為、コンテナの運用は tmpfs で行ってもらうようにお願いして、デフォルトはコンテナイメージだけを read-only な状態で扱うようにしています。少し手間になりますが、こういう問題は完全に防げますのでやりがいのある手間だと思っています。

「開発モード」の問題があればできるだけのサポートを行いたいと思っていますが、量産向けではありませんのでご了承ください。

よろしくお願いします。