Armadilloフォーラム

Armadilloのoverlayfsにおけるlowerの取り扱いについて

k.yamada

2023年2月22日 11時04分

山田と申します。

overlayfsのlowerの取り扱いについて、気になることがありましたので話題を上げさせていただきます。

●Armadillo G3と640におけるlowerの設定の違いについて
Armadillo G3において、overlayfsを適用した上でパッケージの更新を行う場合、chrootを用いてlowerを直接参照する手法が紹介されています
https://armadillo.atmark-techno.com/blog/53/2803
この記事の手法は、lowerは最初から読み書き可能な状態でマウントされている前提となっています。
一方で、Armadillo 640でoverlayfsを適用した場合、lowerは読み取り専用の状態でマウントされます。
なぜこの差があるのか気になっています。

●Armadillo G3のlowerに書き込みできることとKerneldocの記述の違いについて
LinuxのKerneldocでは、lowerへの変更は許容されていないという記述があるという記事を見かけました。
https://v2n.hatenablog.com/entry/2020/03/02/051942
この点を考慮すると、Almadillo G3ではこの記述に反する実装(lowerに書き込むことができる)がなされているように見受けられますが、問題は起きないのでしょうか?
独自のパッチを当てるなどで対策されているということでしょうか?

なお、Armadillo 640において、lowerにあるファイルを直接変更するような下記操作を行うと、overlayの環境から参照した場合と、lowerを直接参照した場合で、内容の齟齬が発生します。

root@armadillo:~# mount -o rw,remount /overlay/system
root@armadillo:~# pwd
/root
# lowerにtestdirとtestfile.txtがあり、overlayの環境から参照できる
root@armadillo:~# ls
testdir
root@armadillo:~# ls testdir/
testfile.txt
root@armadillo:~# chroot /overlay/system
# lowerにあるディレクトリとファイルを削除し、同名のディレクトリ・ファイルを再度作成する
root@armadillo:/# rm -rf /root/testdir
root@armadillo:/# mkdir /root/testdir
root@armadillo:/# touch /root/testdir/testfile.txt
root@armadillo:/# exit
exit
root@armadillo:~# ls
testdir
root@armadillo:~# ls testdir/
root@armadillo:~#                       ←★ overlayの環境からはファイルが見えない
root@armadillo:~# ls /overlay/system/root/testdir
testfile.txt                         ←★ lowerにはファイルが存在している
root@armadillo:~#

Armadillo G3において先述したchrootを用いる手法でパッケージの更新を行う場合も、本操作と同様、lowerにあるファイルを直接更新したり削除されると考えていますが、問題なく動作するということでしょうか?

コメント

at_dominique.m…

2023年2月22日 13時09分

山田さん、

お世話になっています、
アットマークテクノのマルティネです。

> ●Armadillo G3と640におけるlowerの設定の違いについて
> Armadillo G3において、overlayfsを適用した上でパッケージの更新を行う場合、chrootを用いてlowerを直接参照する手法が紹介されています
> https://armadillo.atmark-techno.com/blog/53/2803
> この記事の手法は、lowerは最初から読み書き可能な状態でマウントされている前提となっています。
> 一方で、Armadillo 640でoverlayfsを適用した場合、lowerは読み取り専用の状態でマウントされます。
> なぜこの差があるのか気になっています。

Armadillo 640 と Armadillo IoT G3 で使っている overlay のスクリプトは同じですので、環境の違いでしょうか(debian のバージョン、fstab の内容、u-boot の optargs の環境変数に「ro」か「rw」の有無など)

個人としては lower を読み取り専用にした方が少しだけ安全だと思いますので、そちらをおすすめしますが、普段の使い方では書き込みはございませんのであまり変わらないと思います。
その場合は「mount -o remount,rw /overlay/system」で書き込み可能にしておけば、ブログの手順通りに使えます。

> ●Armadillo G3のlowerに書き込みできることとKerneldocの記述の違いについて
> LinuxのKerneldocでは、lowerへの変更は許容されていないという記述があるという記事を見かけました。
> https://v2n.hatenablog.com/entry/2020/03/02/051942
> この点を考慮すると、Almadillo G3ではこの記述に反する実装(lowerに書き込むことができる)がなされているように見受けられますが、問題は起きないのでしょうか?
> 独自のパッチを当てるなどで対策されているということでしょうか?
>
> Armadillo G3において先述したchrootを用いる手法でパッケージの更新を行う場合も、本操作と同様、lowerにあるファイルを直接更新したり削除されると考えていますが、問題なく動作するということでしょうか?

その理解であっています、普段の使い方では lower に書き込めば色々齟齬が発生します。独自のパッチはありません。

具体的にいくつかの問題がありますね。例えば:
- overlay で変更したファイルは tmpfs にコピーされたので、lowerで変更してもその変更に影響がありません
- overlay ですでに読んだディレクトリなどがキャッシュされた可能性がありますので、lower の新しいファイルを見えない可能性もあります。

こういう問題がありますが、chroot した分には問題ないです。lower自体は higher に依存がありませんので、 chroot で行うコマンドが無事に lower を更新できます。
その状態から再起動さえすれば矛盾が解決されますので、綺麗な方法とはいえませんが問題なく更新などはできます。
(停止の時に多少の問題があっても、無事に再起動できる可能性が高いです。)

ブログの情報が確かに少したりないと思いますので、少し社内で話してから注意を少し足しておきます。指摘ありがとうございました。

また何か疑問があれば聞いてください。

k.yamada

2023年2月28日 12時01分

山田です。
ご回答いただきありがとうございます。

> > ●Armadillo G3と640におけるlowerの設定の違いについて
> > Armadillo G3において、overlayfsを適用した上でパッケージの更新を行う場合、chrootを用いてlowerを直接参照する手法が紹介されています
> > https://armadillo.atmark-techno.com/blog/53/2803
> > この記事の手法は、lowerは最初から読み書き可能な状態でマウントされている前提となっています。
> > 一方で、Armadillo 640でoverlayfsを適用した場合、lowerは読み取り専用の状態でマウントされます。
> > なぜこの差があるのか気になっています。
>
> Armadillo 640 と Armadillo IoT G3 で使っている overlay のスクリプトは同じですので、環境の違いでしょうか(debian のバージョン、fstab の内容、u-boot の optargs の環境変数に「ro」か「rw」の有無など)
>
> 個人としては lower を読み取り専用にした方が少しだけ安全だと思いますので、そちらをおすすめしますが、普段の使い方では書き込みはございませんのであまり変わらないと思います。
> その場合は「mount -o remount,rw /overlay/system」で書き込み可能にしておけば、ブログの手順通りに使えます。

Armadillo 640とG3の間でマウントオプションが異なっているためlowerが読み取り専用か読み書き可能の差異は出ているが、
その他の違いはないとのことで了解しました。
パッケージをアップデートする方法として、Armadillo 640でもchrootを利用できるということで認識あっておりますでしょうか。

> > ●Armadillo G3のlowerに書き込みできることとKerneldocの記述の違いについて
> > LinuxのKerneldocでは、lowerへの変更は許容されていないという記述があるという記事を見かけました。
> > https://v2n.hatenablog.com/entry/2020/03/02/051942
> > この点を考慮すると、Almadillo G3ではこの記述に反する実装(lowerに書き込むことができる)がなされているように見受けられますが、問題は起きないのでしょうか?
> > 独自のパッチを当てるなどで対策されているということでしょうか?
> >
> > Armadillo G3において先述したchrootを用いる手法でパッケージの更新を行う場合も、本操作と同様、lowerにあるファイルを直接更新したり削除されると考えていますが、問題なく動作するということでしょうか?
>
> その理解であっています、普段の使い方では lower に書き込めば色々齟齬が発生します。独自のパッチはありません。
>
> 具体的にいくつかの問題がありますね。例えば:
> - overlay で変更したファイルは tmpfs にコピーされたので、lowerで変更してもその変更に影響がありません
> - overlay ですでに読んだディレクトリなどがキャッシュされた可能性がありますので、lower の新しいファイルを見えない可能性もあります。
>
> こういう問題がありますが、chroot した分には問題ないです。lower自体は higher に依存がありませんので、 chroot で行うコマンドが無事に lower を更新できます。
> その状態から再起動さえすれば矛盾が解決されますので、綺麗な方法とはいえませんが問題なく更新などはできます。
> (停止の時に多少の問題があっても、無事に再起動できる可能性が高いです。)

Armadillo 640とG3については、chrootを利用しlowerを直接参照した状態でパッケージをアップデートした後は、再起動を実施することで、
overlayの状態でも正常にアップデートした状態が反映されるということで了解しました。

また不明点等出てきましたら質問させていただきます。ありがとうございました。

at_dominique.m…

2023年3月1日 8時03分

山田さん、

マルティネです。

> Armadillo 640とG3の間でマウントオプションが異なっているためlowerが読み取り専用か読み書き可能の差異は出ているが、
> その他の違いはないとのことで了解しました。
> パッケージをアップデートする方法として、Armadillo 640でもchrootを利用できるということで認識あっておりますでしょうか。

はい、 blog もその様に更新しました:
https://armadillo.atmark-techno.com/blog/53/2803

> Armadillo 640とG3については、chrootを利用しlowerを直接参照した状態でパッケージをアップデートした後は、再起動を実施することで、
> overlayの状態でも正常にアップデートした状態が反映されるということで了解しました。

はい。念のため Armadillo が idle な状態でアップデートすることをおすすめしますが、再起動で正常な状態に戻ります。

また何かございましたらよろしくお願いします。