私は、組み込みシステム上のext3をfsckをすべきか?
-
20-08-2019 - |
質問
我々は、ブロック・デバイス・エミュレーションとフラッシュストレージ上に存在するファイルシステムへのR / Wアクセスを必要とする組み込みシステムの数を有しています。私たちの最も古いプラットフォームは、コンパクトフラッシュ上で動作し、これらのシステムは、起動時に実行され、単一のfsckを実行せずに3年以上使用されてきたし、これまでのところ、我々は、ファイルシステムまたはCFに起因する一切の障害を持っていません。
当社の最新のプラットフォームでは、我々は最初の生産のためのUSBフラッシュを使用し、現在のディスク・オン・モジュールR / Wストレージ用に移行しています。しばらく前に、私たちはので、私はそれが役立つだろうかどうかを確認するために、e2fsckを有効にUSBストレージ上で実行されているデバイスの多くのファイルシステムを持ついくつかの問題がありました。それらを交換し、一度ので、それは我々が悪いのフラッシュメモリの出荷を受けていたが判明したような問題は去っていきました。我々は、それはそれなしに、より信頼性が高く、歴史的に、我々は罰金されているシステムを作った兆候がなかったので、私は無効にe2fsck以来持っています。
さて、私は再びファイルシステムエラーを見始めましたディスクオンモジュール単位で入れ始めているということ。突然のシステムは、特定のファイルを書き、私は緊急コンソールからファイルにアクセスしようとした場合、私はちょうど「のの入力/出力エラー」を取得/読み取ることができません。私は再びe2fsckを有効にし、すべてのファイルが修正されました。
オライリーさんは、「のビル組込みLinuxシステムの」ext2ファイルシステム上で実行されているにe2fsckを推奨していますが、私は、私はそれを有効にすべきか否かに少し困惑しているように、ext3ファイルシステムに関連して、それを言及していません。
あなたの組み込みシステム上でfsckを実行する上で取るとは何ですか?私たちは、誰もが、セットアップのようなものの経験を持っていない、AR / Oパーティションとそのfsckが誤って重要なシステムバイナリを削除することはできませんので、同じフラッシュデバイス上のAR / wのパーティションに変更する必要があるファイルのみにバイナリを置くことを検討しています(良い/悪い)?
解決
私はあなたの質問への答えは、より多くのあなたのアプリケーションは、そのデータに対する持って一貫性の要件の種類に関係だと思います。電源はシステムの正式なシャットダウンせずに失われた場合、つまり、何を保証するのか?一般的には、デスクトップ・オペレーティング・システムのタイプのファイルシステムはいずれも、特定のアプリケーションを閉じる/ファイルの同期とディスクキャッシュのフラッシュは行わずにすべてのことだけでなく、これを処理しない、などのアプリケーションにおける重要なトランザクションポイントで、あなたが維持するために必要なものを確実にするためにあります事実がメディアにコミットします。
fsckの修正にファイル・システムを実行しているが、上記気にせず、あなたが作ったものに変更についての保証は実際に保管されませんがあります。すなわち:それはあなたが停電の結果として失うことになるかを正確に決定論的ではありません。
。私は別の読み取り専用のパーティション上のバイナリや他の重要な読み取り専用データを置くことは、彼らが誤っ構造・システム・ファイルに起因するfsckの修正に放り込まれることができないことを保証する助けないことに同意します。最低でも、R / Wデータが保持されるよりも、根本オフ異なるサブディレクトリにそれらを置くことに役立ちます。あなたがソフトウェアのアップデートをサポートしている場合でも、両方のケースでは、あなたはまだ、とにかく「読み取り専用」の領域を書くに対処するための仕組みを持っている必要があります。
私たちのアプリケーションでは、我々は実際にバイナリのようなもののためのディレクトリのペアを維持し、システムは、二つの領域の1のいずれかから起動するように設定されています。ソフトウェア更新中は、我々は、最初のディレクトリを更新し、メディアにすべてを同期すると第二のコピーの更新に移動する前に、ディスク上のMD5チェックサムを確認します。 MD5チェックサムが良好であれば、起動時には、彼らにのみ使用されます。これは、あなたが常に一貫したイメージを起動していることを確認します。
他のヒント
デーブ、
私は常に再起動の回数ではなく、毎回の後にfsckを実行することはお勧めします。
その理由は、ext3のジャーナル-EDである、ということです。あなたはその後、ライトバック(ジャーナルレス)、ほとんどの時間を有効にしない限りだから、あなたのメタデータ/ファイルシステムのテーブルには、あなたのデータ(ファイル)と同期する必要があります。
しかし、ジェフが述べたように、それは、ファイル・システム上の層を保証するものではありません。レコードの一部は、おそらくファイルシステムに書き込まれませんでしたので、それは、あなたがまだ「破損」のファイルを取得し、意味ます。
私は、あなたが実行しているものを組み込みデバイスわからないんだけど、どのくらいの頻度、それが再起動しますでしょうか? 再起動前に
それは、再起動を制御しています場合は、常に「同期;同期同期」を行うことができます。私は長年、CF自分自身を使用してきた、と非常にまれ私は、ファイル・システム・エラーを得ました。 fsckはそのケースに助けています。
そして、あなたのパーティションを分離することについて、私はそれの利点を疑います。ファイル・システム上のすべてのデータ/ファイルの場合、それに関連付けられたメタデータがあります。時間のほとんどは、あなたは、例えばファイルを変更しない場合。バイナリ/システムファイルは、このメタデータは変更しないでください。あなたが障害のあるハードウェアを持っている場合を除き、クロス話して書き込み&読むように、それらの読み取り専用のファイルが安全である必要があります。
は、書き込み可能な何かを持っているとき、ほとんどの問題が生じ、あなたがこれを置く場所、アプリケーションがそれをうまく処理できない場合にかかわらず、それは問題を引き起こす可能性があります。
希望に役立ちます。