hironori
2022年10月20日 16時24分
お世話になっております。
fstabを利用して電源ON時にmicroSDを自動マウントさせておりますが、たまに失敗する場合があり困っています。
設定の不備などの問題点、もしくは別の自動マウント手段がありましたらご教示いただけますでしょうか。
■状況
① /etc/fstabの記述は以下のとおりです。persist_fileは実行済みです。
armadillo:/etc# cat fstab /dev/root / ext4 ro 0 0 tmpfs /tmp tmpfs nosuid,nodev 0 0 /dev/mmcblk2p3 /var/log ext4 defaults,noatime 0 0 /dev/mmcblk2p5 /var/lib/containers/storage_readonly btrfs compress=zstd,discard=async,noatime,subvol=boot_1/containers_storage 0 0 /dev/mmcblk2p5 /var/app/rollback/volumes btrfs compress=zstd,discard=async,noatime,subvol=boot_1/volumes 0 0 /dev/mmcblk2p5 /var/app/volumes btrfs compress=zstd,discard=async,noatime,subvol=volumes 0 0 /dev/mmcblk2p5 /var/tmp btrfs compress=zstd,discard=async,noatime,subvol=tmp 0 0 /dev/mmcblk2gp1 /var/at-log vfat defaults,noatime 0 0 /dev/mmcblk2p4 /opt/firmware squashfs defaults 0 0 /dev/mmcblk1p1 /mnt ext4 defaults 0 0
② 失敗した場合にlsblkで確認するとmmcblk1p1を認識しているようです。
armadillo:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS mmcblk2 179:0 0 7.3G 0 disk tqmmcblk2p1 179:1 0 300M 0 part tqmmcblk2p2 179:2 0 300M 0 part /live/rootfs tqmmcblk2p3 179:3 0 50M 0 part /var/log tqmmcblk2p4 179:4 0 200M 0 part /opt/firmware mqmmcblk2p5 179:5 0 6.5G 0 part /var/tmp /var/app/volumes /var/app/rollback/volumes /var/lib/containers/storage_readonly mmcblk2boot0 179:32 0 31.5M 1 disk mmcblk2boot1 179:64 0 31.5M 1 disk mmcblk2gp0 179:96 0 8M 0 disk mmcblk2gp1 179:128 0 8M 0 disk /var/at-log mmcblk2gp2 179:160 0 8M 0 disk mmcblk2gp3 179:192 0 8M 0 disk mmcblk1 179:224 0 15G 0 disk mqmmcblk1p1 179:225 0 15G 0 part zram0 254:0 0 0B 0 disk
なお、起動後に以下のとおり手動でマウントすると成功します。
mount -t ext4 /dev/mmcblk1p1 /mnt
③ 自動マウント失敗時、起動時のログには以下の通りマウント失敗のメッセージが出力されます。
localmount | * Mounting local filesystems ...mount: /mnt: /dev/mmcblk1p1 already mounted or mount point busy. localmount | dmesg(1) may have more information after failed mount system call. localmount | * Some local filesystem failed to mount localmount | [ !! ]
④ dmesgを確認すると、以下のメッセージが自動マウント成功時は2回記録されていますが、自動マウント失敗時は1回のみ記録されています。
EXT4-fs (mmcblk1p1): mounted filesystem with ordered data mode. Opts: (null)
⑤ 電源のOFF→ONのときは自動マウント失敗することがありますが、rebootコマンドによる再起動時は今のところ自動マウントに失敗していません。
⑥ 異なる2種類のmicroSDカードで確認しましたが、どちらの場合も自動マウントに失敗することがあります。
以上、よろしくお願いいたします。
コメント
hironori
at_dominique.m…
hironoriさん、
> 本日、ご指摘の通りマウント先を/var/app/volumes/mntに変更して確認しましたが、
> 変更前と同様の起動ログが発生し、残念ながら状況は変わりませんでした。
了解しました。それでしたらタイミングの問題で local.d で回避できると思いますが、引き続きのテストをよろしくお願いします。
また、私の方ではまだ再現できてませんが(SDカードのスピードの影響かなにか?)、ひとまず引っかかりそうなところを修正してみましたので、よろしければ添付にある abos-base-1.12-r1.apk.tar を手元の armadillo に展開して、「persist_file -a add ./abos-base-1.12-r1.apk」でインストールしていただければ、動くかもしれません。
具体的には:
- 木曜日説明した overlay の問題の回避
- 自動アップデートスクリプト(USBやSDカードにswuが当歳されたら自動的にインストールするスクリプト)にいくつかの制限の追加
この修正は今月のアップデートに入りませんが、問題なければ11月のアップデートに入れたいと思います。
それでも問題が続いていたら大変お手数ですが、「Starting kernel ...」の行からのシリアルのログと、/var/log/messages の内容を送っていただければすごく助かります。
よろしくお願いします。
ファイル | ファイルの説明 |
---|---|
abos-base-1.12-r1.apk_.tar |
hironori
マルティネさん
ご回答ありがとうございます。
> 了解しました。それでしたらタイミングの問題で local.d で回避できると思いますが、引き続きのテストをよろしくお願いします。
local.dでSDカードマウントし、その後にコンテナ起動するよう修正しました。十数回程度動作を確認しました。
今のところ正常に自動マウントされているので、おそらくタイミングの問題であったものと思われます。
ご助言いただき、ありがとうございました。
> また、私の方ではまだ再現できてませんが(SDカードのスピードの影響かなにか?)、ひとまず引っかかりそうなところを修正してみましたので、よろしければ添付にある abos-base-1.12-r1.apk.tar を手元の armadillo に展開して、「persist_file -a add ./abos-base-1.12-r1.apk」でインストールしていただければ、動くかもしれません。
こちらの修正については未だ確認できていません。
折を見てfstabで自動マウントする環境下で確認してみます。
at_dominique.m…
2022年10月20日 18時59分
hironoriさん、
お世話になっています、
アットマークテクノのマルティネです。
/mnt はいくつかのシステムスクリプトで使っていて、起動時には少し混乱しているようですね。
今こちらで試したところ、別のエラーで overlayfs の処理中に /mnt をリマウントして以下のワーニングが出ます:
(結果的にあは /mnt に SD カードがマウントされてますのですぐには不具合が出ませんが、この場合は persist_file が使えなくなります。)
このエラーの処理は少し頑張れば今後のアップデートで直せます。
残念ですが、hironoriさんのエラーはまだ再現できてません。バージョンの違いで何か少し変わったかもしれません、明日か来週もうちょっと追ってみますが、とりあえず回避策から始めましょう 。
問題になりそうな点が二つあります:
- /mnt が他のスクリプトで使われてます。基本は private mountspace で実行するように頑張りましたが、誤りや例外もありますので、/var/app/volumes/mnt ディレクトリを作ってそっちらを使えたらと思います。 /var/app/volumes は触りませんので、パスが少し長くなりますがそこを自由に使って見てください。
- タイミングの問題でしたら、 fstab ではなく、/etc/local.d/mount_sd.start などで mount コマンドを実行してみたらどうでしょうか?
local のスクリプトが最後で実行されて、podman-atmark サービスの後に実行されますので、コンテナに使う場合はそのコンテナを `set_autostart no` で自動起動を止めて mount の後に podman_start containername で実行できます。(すみません、汚いですね…)
何か分かりましたらまた連絡します。
よろしくお願いします。