私は、組み込みシステムへの安全なシャットダウン電源の提供に苦労しているハードウェア設計者です。 Linuxは通常、ファイルシステムを多用し、ファイルが読み取られるたびにメタデータを更新することを知っています。すべてのファイルアクセスに対して必然的な書き込みがあります。この書き込みを遅らせることは可能だと思います。これが不確定な遅延である場合(つまり、発生しない場合)はどうなるのでしょうか。いくつかの背景:
運用上の理由から、システムのシャットダウン中にバッテリーバックアップを使用して電力を供給しないことが望ましいです。つまり、1〜5秒のパワーダウンホールドアップを検討しています。これは、O/SがS/Wエンジニアのテストからシャットダウンするのに十分な長さではないようです。これまで、従来の組み込みRTOSを使用してきたLinuxは、私たち全員にとって「新しい」ものです。
FLASHドライブから起動し、マシンのRAMで実行するため、FLASH書き込みがゼロの場合、通常、電源障害時に破損することはありません。
システムNVデータをFLASHに保存します。これは、10ミリ秒で書き込みの成功を保証する小さなマイクロによって制御されます。これで問題ありませんが、Linuxが起動元のドライブに何を書き戻す必要があるかを理解するのに苦労しています。そうすることを阻止した場合、どのような結果が生じるでしょうか?
残念ながら、現時点ではuSDHCカードから実行しているため、ハードウェアで単純に書き込み保護して調べることはできません。
mount
のマンページから:
-r, --read-only
Mount the filesystem read-only. A synonym is -o ro.
Note that, depending on the filesystem type, state and kernel
behavior, the system may still write to the device. For example,
Ext3 or ext4 will replay its journal if the filesystem is
dirty. To prevent this kind of write access, you may want to mount
ext3 or ext4 filesystem with "ro,noload" mount options or set the
block device to read-only mode, see command blockdev(8).
ファイルシステム階層の一部は書き込み可能である必要があります(例:/var/log
ログファイルを入れる;しばしば/tmp
一時ファイルを保存します)。これらの場合、いくつかの非永続パーティション(別名ramdisk、tmpfs
、...)を使用します。
Linuxは通常、ファイルシステムを多用し、ファイルが読み取られるたびにメタデータを更新します。すべてのファイルアクセスに対して必然的な書き込みがあります。
それは正しくありません。より正確に言うと、これは何年もの間デフォルトではなくなりました。デフォルトでは、アクセス時間は、mtimeまたはctimeより古いか、24時間より古い場合にのみ更新されます。 atime更新は、マウントオプションnoatime
によって完全に無効にできます。
本当に速くシャットダウンする必要がある場合は、どのステップに時間がかかるかを判断し、これらのプロセスをすぐに強制終了する必要があります(-SIGKILL)。他の人も-SIGTERMを取得し、1〜2秒後に-SIGKILLを取得する必要があります。そうすれば、カーネルはすぐにファイルシステムを閉じることができるはずです。
r/oモードで/
を実行することはごく普通のことです。たとえば、これがovirt-nodeの動作方法です。問題は、毎回r/wに再マウントせずに永続的な構成を使用することです。そして、解決策は、構成ファイル用の小さなr/wパーティションを用意し、起動時に/etc
の元のファイルにそれらのファイルをバインドマウントすることです。