Armadilloフォーラム

vfat(MSDOS)のマウント

sakashita_spc

2019年3月17日 19時20分

お世話になります。

VFAT(msdos)でフォーマットされたSDカードを以下のスクリプト(rc.local内)でマウントしています。
if test -b /dev/mmcblk0p1; then
echo -n "Mounting SD Memory"
mount -t vfat /dev/mmcblk0p1 /mnt
check_status
fi
以下を参考にしました。
https://users.atmark-techno.com/forum/armadillo/1478

通常時は、問題ないのですが、エラーが発生したとき、read-onlyになります。設定を見ると
# mount
...<略>....
/dev/mmcblk0p1 on /mnt type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=utf8,shortname=mixed,errors=remount-ro)

となり、『errors=remount-ro』これにより、Readonlyになると思います。
また、実際に、コンソールに
FAT-fs (mmcblk0p1): error, clusters badly computed (274 != 273)
FAT-fs (mmcblk0p1): Filesystem has been set read-only

と出ます。システム的にreadonlyにするのが適切なのでしょうが、アプリの運用上、このタイミングを知る方法はありますでしょうか?
(ポーリングで監視が必要?あるいは、シグナルが発生する?)

また、エラーが発生しても、read-onlyを抑制する設定に変更は可能でしょうか?
(このあたりは、アプリ利用者のリスクにはなるのですが。。。)

このあたりを参照しましたが、少し求めているものが異なりますので、よろしくお願いします。
https://users.atmark-techno.com/forum/armadillo/1801


コメント

at_mizo

2019年3月18日 16時09分

溝渕です。

> FAT-fs (mmcblk0p1): error, clusters badly computed (274 != 273)
> FAT-fs (mmcblk0p1): Filesystem has been set read-only
>
> と出ます。システム的にreadonlyにするのが適切なのでしょうが、アプリの運用上、このタイミングを知る方法はありますでしょうか?

mount後に、"/proc/mounts"の出力をパースすることで知ることができると思います。

このエラーメッセージは、Linuxカーネルの、
fs/fat/misc.c: fat_chain_add()
によって出力されますが、ueventを発生させる等をしない実装になっています。

> また、エラーが発生しても、read-onlyを抑制する設定に変更は可能でしょうか?
> (このあたりは、アプリ利用者のリスクにはなるのですが。。。)

ファイルシステムの破損状態にもよるのですが、fsck実行後に、rwでremount
してみてはいかがでしょうか。

sakashita_spc

2019年3月25日 1時39分

溝渕様

下記、ご提案ありがとうございます。

> ファイルシステムの破損状態にもよるのですが、fsck実行後に、rwでremount
> してみてはいかがでしょうか。
これは、うまくいきそうです。
自動的にremountするには、何か、スクリプトを実行させておくしか方法はないでしょうか?
cronで、定時間毎にチェックするような感じになりますでしょうか?
良い方法があれば提案いただければ、幸いです。

以上、よろしくお願いします。

> 溝渕です。
>
> > FAT-fs (mmcblk0p1): error, clusters badly computed (274 != 273)
> > FAT-fs (mmcblk0p1): Filesystem has been set read-only
> >
> > と出ます。システム的にreadonlyにするのが適切なのでしょうが、アプリの運用上、このタイミングを知る方法はありますでしょうか?
>
> mount後に、"/proc/mounts"の出力をパースすることで知ることができると思います。
>
> このエラーメッセージは、Linuxカーネルの、
> fs/fat/misc.c: fat_chain_add()
> によって出力されますが、ueventを発生させる等をしない実装になっています。
>
>
> > また、エラーが発生しても、read-onlyを抑制する設定に変更は可能でしょうか?
> > (このあたりは、アプリ利用者のリスクにはなるのですが。。。)
>
> ファイルシステムの破損状態にもよるのですが、fsck実行後に、rwでremount
> してみてはいかがでしょうか。
>

at_mizo

2019年3月25日 9時12分

溝渕です。

> 自動的にremountするには、何か、スクリプトを実行させておくしか方法はないでしょうか?
> cronで、定時間毎にチェックするような感じになりますでしょうか?
> 良い方法があれば提案いただければ、幸いです。

SDカードのmount後にone-shotで実行すると良いと思います。

at_kojiro.yamada

2019年3月29日 13時22分

> cronで、定時間毎にチェックするような感じになりますでしょうか?

不定期的にリードオンリーでremountされるのであれば、
定期的にremountすることになると思います。
書き込みを行う前にかならずremountする、でも同じようなことができますね。

sakashita_spc

2019年5月8日 23時10分

お世話になります。

少し時間が空いてしまいました。
いろいろなアドバイスをいただきありがとうございます。

今回、Fatでの問題なのですが、SDカートをFATとext2 or ext4のパーティションに分けるアプローチの案が出てきました。

その場合、以下に関して、質問させてください。

SDカードをext2 or ext4のパーティションを持つことは可能と思うのですが、FATと同様に、状況によっては
extのパーティションでも、何らかしらのエラーでreadonlyになる可能性はあるのでしょうか?

以上、よろしくお願いします。