manabu-yoshioka-arc
2024年2月1日 13時58分
お世話になっております。
Armadillo-iot-a6 を使用した機器を開発しています。この機器では overlayfs を使っています。その条件で eMMC にデータを書き込むことは可能でしょうか。可能な場合は、どのようにファイルにアクセスすれば良いのでしょうか。不可能な場合には他に要望を満たす方法はありますでしょうか。USBメモリを差し込んでおくなど。
詳細
この機器の設定データは /home/ユーザ/config ファイルに書き込み、利用しています。
今、次のような要望が出てきました。
- 機器の設定データをクラウドのサーバ側で管理したい。本体の設定も行いたい。
- ついては、設定データをサーバから本体に送り、設定ファイルを書き換えたい。
しかし、上でも説明させていただいた通り、この機器は overlayfs を利用し起動しています。
overlayfs 使用時でも、eMMC 上のルートファイルシステム上のファイルを書き換えする方法はないでしょうか。
よろしくお願いします。
コメント
at_kojiro.yamada
(出遅れてしまいました。)
GPP を使う場合についての回答になります。
> squashfs のイメージが overlayfs 上の Linux から書き換え可能だとした場合、操作は以下で間違いないでしょうか。
> - 「22.5.1. squashfs イメージを作成する」に従い、特定のファイルイメージを squashfs イメージにする。
> - 「22.5.2. squashfs イメージを書き込む」に従い、作成した squashfs イメージ を `/dev/mmcblk0gp2` に書き込む
squashfs は読み取り専用のファイルシステムであり、書き換える用途には合わないため、他のファイルシステムをGPPで利用することをおすすめします。
手順は、mkfs.fs名 のコマンドでファイルシステムを作成して、mount でマウントして利用するだけです。
特にこだわりがなければルートファイルシステムと同じ ext4 で良いかと思います。
[armadillo]# mkfs.ext4 /dev/mmcblk0gp3
[armadillo]# mount /dev/mmcblk0gp3 /home//config
[armadillo]# <色々書き込み>
[armadillo]# umount /home//config
> - 書き込みを禁止したくはないので、「22.5.3. GPP への書き込みを制限する」は行わない。
問題ありません。
> - 「22.5.4. 起動時に squashfs イメージをマウントされるようにする」に従い、/etc/fstab を書き換える。
上述の通り、squashfs 以外のファイルシステムをおすすめします。
> - マニュアルの例に従うと、`/opt/sample/設定ファイル` がマウントされているので、このファイルに設定値を書き込んでおき、起動時にそのデータを読み取れば良い。
> - 書き込み禁止にもしていないので、もし設定データを変更する必要があれば、`/opt/sample/設定ファイル`を書き換えて、リブートさせれば新しい設定値で機器を動作させることができる。
ご認識のとおりです。
最後に、書き込みを行うという性質上、
設定ファイルが壊れてしまった場合や
ファイルシステムをマウント出来なかった場合を想定することを推奨します。
(md5sum などでファイルが壊れてないか確認する、
でたらめな値が設定された場合の挙動をテストしておく、
設定ファイルが存在しなかった場合に動作を停止/デフォルト値で設定ファイルを作成して動作を続ける、
mount 出来なかった場合に動作を停止/自動的にファイルシステムを作成し直して動作を続けるなど)
at_koseki
古関です。
動作中にルートファイルシステムの内容を書き換えたいわけではなく、
拡張のストレージが欲しいという理解で良いでしょうか?
もしそうであれば、eMMCの第4パーティション(/dev/mmcblk0p4)を
1GB分ユーザー開放していますのでこちらをご利用ください。
以下がeMMCのユーザーパーティションのマップになります。
https://manual.atmark-techno.com/armadillo-iot-a6/armadillo-iota6_produ…
ルートファイルシステムは/dev/mmcblk0p2に構築していますので、
overlayfsによる保護を有効にした場合は、原則は書き換え禁止です。
/dev/mmcblk0p4はユーザー開放していますので、
お客様の都合のいいパーティションでフォーマットし
例えばUSBカメラで撮影した画像ファイルなどを保存するなどの用途に用いて問題ありません。
# mkfs.ext4 /dev/mmcblk0p4
# mount -t ext4 /dev/mmcblk0p4 /mnt
# echo hoge > /mnt/hoge.txt
# umount /mnt
....
manabu-yoshioka-arc
> 動作中にルートファイルシステムの内容を書き換えたいわけではなく、
> 拡張のストレージが欲しいという理解で良いでしょうか?
はい、その通りです。質問が分かりにくかったですね。申し訳ございません。
要は overlayfs を有効にした場合でも、内容を書き換え・読み込めるストレージが欲しかった。しかし信頼性の面から外部USBコネクタにさすUSBメモリの使用は避けたく、 基板に実装されている、eMMC のどこかが使えないのかなと思って発した質問でした。
> もしそうであれば、eMMCの第4パーティション(/dev/mmcblk0p4)を
> 1GB分ユーザー開放していますのでこちらをご利用ください。
ありがとうございます。気づいておりませんでした。`/dev/mmcblk0p4` 使わせていただきます。その前の回答のデバイスをマウントできなかったり、ファイルの内容が壊れている時のアドバイスも助かります。
追加でもう一つだけ質問させてください。「12.1.1. インストールディスクイメージの作成」の「表12.2 イメージファイルと引数の対応」を参照しています。
引数に `BOARD` を使用した場合には、`/dev/mmcblk0p4` も書き換えが行われるのでしょうか。
それ以外のオプションの場合、`/dev/mmcblk0p4` は書き換えが行われないということで間違いないでしょうか。
ご確認よろしくお願いします。
at_kojiro.yamada
> 追加でもう一つだけ質問させてください。「12.1.1. インストールディスクイメージの作成」の「表12.2 イメージファイルと引数の対応」を参照しています。
> 引数に `BOARD` を使用した場合には、`/dev/mmcblk0p4` も書き換えが行われるのでしょうか。
> それ以外のオプションの場合、`/dev/mmcblk0p4` は書き換えが行われないということで間違いないでしょうか。
> ご確認よろしくお願いします。
BOARD に aiota6 を指定して作成したインストールディスクでArmadilloを初期化すると、 初期化の際にeMMCの第4パーティション /dev/mmcblk0p4 が作成されます
。
/dev/mmcblk0p4 のファイルシステムは ext4 になります。
現状の make-install-disk-image には、 mmcblk0p4 にイメージを書き込んだり、tarファイルを展開したりする機能がありません。
つまり、インストールディスクを実行した直後の mmcblk0p4 は、ファイルの無いまっさらな状態になります。
manabu-yoshioka-arc
> BOARD に aiota6 を指定して作成したインストールディスクでArmadilloを初期化すると、 初期化の際にeMMCの第4パーティション /dev/mmcblk0p4 が作成されます
> 。
> /dev/mmcblk0p4 のファイルシステムは ext4 になります。
>
> 現状の make-install-disk-image には、 mmcblk0p4 にイメージを書き込んだり、tarファイルを展開したりする機能がありません。
> つまり、インストールディスクを実行した直後の mmcblk0p4 は、ファイルの無いまっさらな状態になります。
>
よく理解できました。ありがとうございます。ext4 フォーマットで初期化されたディスクが準備されているということですね。
試してみます。また何かありましたらよろしくお願いします。
manabu-yoshioka-arc
2024年2月1日 16時03分
本件を自分なりに調べてみたところ、マニュアルの「22.5. eMMC の GPP(General Purpose Partition) を利用する」が使えるのではと感じ、マニュアルを読み込んでいます。
ただ、この操作を行った結果、squashfs イメージ内のファイルを、overlayfs 上のシステムから書き換え可能なのかどうかがわかりません。
squashfs のイメージが overlayfs 上の Linux から書き換え可能だとした場合、操作は以下で間違いないでしょうか。
- 「22.5.1. squashfs イメージを作成する」に従い、特定のファイルイメージを squashfs イメージにする。
- 「22.5.2. squashfs イメージを書き込む」に従い、作成した squashfs イメージ を `/dev/mmcblk0gp2` に書き込む
- 書き込みを禁止したくはないので、「22.5.3. GPP への書き込みを制限する」は行わない。
- 「22.5.4. 起動時に squashfs イメージをマウントされるようにする」に従い、/etc/fstab を書き換える。
- マニュアルの例に従うと、`/opt/sample/設定ファイル` がマウントされているので、このファイルに設定値を書き込んでおき、起動時にそのデータを読み取れば良い。
- 書き込み禁止にもしていないので、もし設定データを変更する必要があれば、`/opt/sample/設定ファイル`を書き換えて、リブートさせれば新しい設定値で機器を動作させることができる。