破損しないファイルシステム(データ損失は許容可能)


9

この問題を中心に展開している既存のトピックがいくつかありますが、私が求めることは少し異なります。組み込みLinuxにSDカードを使用していますが、電力損失に悩まされています。いつかハードウェアを変更したり、適切に終了したりすることができるかもしれません。しかし、今のところ、大騒ぎすることなく停電に耐えられるファイルシステムを見つけたいと思っています。データの損失は許容されます。私は現在書いているファイルより多くを失いたくないのですが、「マウントできません」、「この10分間fsckを待つ」、または「新しいファイルを作成できません」に直面するよりも、むしろそれを失いたいこのiノードが原因で何かエラーが発生しました。プログラムは続けなければなりません!

私はこれを確実にするために多くの努力をしています。私は工業用グレードのコンポーネントを使用しています。ハードウェアウォッチドッグ、ソフトウェアウォッチドッグ、内部、外部、initによるプログラムの再起動、デーモンによるメモリ、ファイル記述子の常時チェックなど、ウォッチドッグがウォッチドッグを監視し、ウォッチドッグが他のウォッチドッグによって監視されています。 ...しかし、SDカードがマウントされて機能することを保証できないようです。

今の私の最善の策は、SDカードでJFSを使用することです。私のインストールにfsckとfsck.jfsを含めます。(私のRAMと私のフラッシュを食べる600kb +を追加します。これは悪いことです。)そして、毎回の起動時にfsckを実行します(ブート時間が長くなる可能性があります。これはやや悪いことです)。それは少し悲しいようですが。

誰かがより良い方法やより良いファイルシステムを知っていますか?

更新:e2fsprogs-libs(jfsutilsへの依存)は、私のディストリビューションでコンパイルするのが非常に難しいようです。ZFSを調べます(私のディストリビューションにはネイティブではありません。そして、私が必要としないことはたくさんあるようです)。

UPDATE2:私のシステムとテストに関するいくつかの詳細:SDカードストレージは、セカンダリのオプションのストレージです。SDカードは、2Gb-8Gbの工業グレードのmicroSDです。SDカードは、mount -tコマンドでrcを介してマウントされます。オプション「noatime」ではなく「sync」。私のディストリビューションは、3.10カーネルと1.21 busyboxを備えたカスタムAnalog Device風味のuClinuxです。私のプライマリストレージはjffs2を使用したspiフラッシュです。私はそれに関して何の問題も経験したことがありません。利用可能なfsck.jffs2があるかどうかさえわかりません。一方でナンドフラッシュ...しかし、それは別の話です。SDカードの目的は、測定データを保存することです。'monitor'プログラムは結果をファイルに追加し、戦略的な同期配置を備えています。ファイルが所定のサイズを超えると、新しいファイルが作成されます。指定した数のファイルに達すると、最も古いファイルが削除されます。停電が原因で現在の測定ファイルが失われた場合でも、問題はありません。ファイルは通常50〜100 kbで、1つの結果は通常1 kbです。これは初期の開発段階にすぎません。何も修正されていません。組み込みシステムでフラッシュ以外のファイルシステムを扱ったのはこれが初めてです。(x86サーバーでext4を取得しました。)

私はvfatから始めました。デフォルトのファイルシステム。(私は、工場がそれを選択する理由があるかもしれないと考えました。そして、物事がうまくいくならば、私はそれほど気にしません。)私は、組み込みvfatデバイスで電力損失の問題を見たことはありません。WinCEでFATの問題を経験しました。しかし、私の「モニター」プログラムが100-200ファイルに達したとき、それ以上作成することを拒否しました。FATにはルートに特別なファイル制限の問題があり、サブディレクトリに少し大きい問題があるようです。1つのディレクトリに500〜1000個のファイルを作成できるようにする必要があります。したがって、vfatは機能しません。

その後、ext2に切り替えました。起動時にfsckを挿入しませんでした。(私がそうしなければならなかったことを知りませんでした。)1日以内に、「モニター」プログラムは、「iノード何か何か」エラーのためにそれ以上のファイルを作成できませんでした。災害!

私の現在のソリューションは、起動時に「e2fsck -y」を使用したext2です。これまでのところ、それは有望なようです。しかし、e2fsckと「起動時のfsck」の概念全体が私を悩ませています。それ自体によるe2fsckは、私のプライマリフラッシュとRAMの350kb以上を費やしています。(実行されていない場合)これは、これが私の最大のプログラムであることを意味します。それはbusyboxよりも大きいです。それは私のカーネルにほとんど匹敵しています。

私はext3を検討してきました。メタデータをジャーナル化しているので、害はありません。それがどれほど役立つかについては疑問です。私の小さなファイルと制御された同期で、私はカバーされるべきだと思いますか?順序付けされた書き込みシーケンスがあります。データもある程度ジャーナル化されていることを意味します。ただし、これにより非決定的なラグが発生する可能性があります。これは私の状況では悪いです。(それはおそらく問題ではありません。)また、スケジュールされた同期機能があります。例えば。5秒ごとにコミットします。自分の同期を妨げていると思います。SDカードの場合、書き込みが多すぎると良くありません。産業用のものでも。これを無効にする方法に関するドキュメントは見つかりません。そして、ext3はまだ、すべての起動時に実行されるように、fsckを要求します!しかし、ext3はまだ可能性があります。

Ext4。ext3のパフォーマンス問題の多くを修正します。本当にパフォーマンスは必要ありません。そして、私のディストリビューションには組み込みのmkfs.ext4とfsck.ext4がないようです。おそらくそれは問題ではありません。それはそうかもしれません。例えば。e2progs-libs(jfsutilsへの依存関係)には、コンパイルに関する多くの問題があるようです。

JFS、XFS、BRFSS。すべて私のカーネルでサポートされています。現在、ユーザースペースのツールボックスには含まれていません。すべてがかなり大きく複雑なシステムのようです。そして、それらはすべて起動時に「fsck」と同等のものを必要とするようです?

自分のファイルシステムをスローすることも検討しました。常にファイルテーブルのコピーを2つ書き込みます。トラバースするとき、正しいCRCと最新のシーケンス番号を持つものを選択します。2段階の書き込みシーケンスを作成します。一時的に割り当て、コミット時に修正します。fsckは必要ありません。少しナイーブかもしれませんが。

UPDATE3:ところで、組み込みシステム(少なくとも1つ)の性質は、それらが自律的で、無人で、手の届かないところにあり、何年も実行する必要があるということです。fsckのようなプログラム人間の相互作用を必要とするには、私を這います。


1
ファイルシステムを読み取り専用でマウントし、書き込みたいもののために小さなファイルシステムを作成しないのはなぜですか?
Chris Down

ZFSもオプションになります(適切なデータ整合性チェック)。
Ouki

これ書き込み用の小さなファイルシステムです
Illishar '24年

はい、私もZFSを見てきました。ただし、ディストリビューションを見ると、サポートが私の顔にぴったりとは入っていません。データの整合性についてはそれほど心配していません。マウントして動作させたいだけです。
Illishar 2014年

btrfs.wiki.kernel.org/index.php/Main_Pageご覧になったことがありましたら、調査結果編集して、より効率的に支援できるようにしてください
Kiwy

回答:


2

ここのあなたの話には、少し矛盾があったり、あいまいさがあります:

私はまだ「マウントできません」、「この10分間fsckを待つ」に直面するよりも、すべてを失いたい

実際には言わないが、これは実際に発生している問題であることを意味します。しかしその後:

e2fsprogs-libs(jfsutilsへの依存)は、私のディストリビューションでコンパイルするのが非常に難しいようです。

意味あなたがまったくのfsckを持っていないことから、e2fsprogs-libsため依存関係であるe2fsprogs提供しますe2fsck。それで、おそらくあなたはまだここで計画段階にあり、システムをでテストしていませんext4が、代わりにJFSから始めるべきであるという結論にジャンプしましたか?何か特別な理由はありますか?

私はラズベリーpi交換(piのプライマリストレージもSDカードです)で、大多数の(私を含む)が一度も経験したことがないにもかかわらず、この種の問題に非常に不満を感じているようです。すべて。はじめはきちんとシステムをシャットダウンするべきだということを知らない人だと思っていましたが、説明してそれは難しいところではなく、システムが正常にシャットダウンされてい報告する人がいます

電力カットに耐えられるようにするためにはこれが必要であると既に述べましたが(これは十分に公正です)、これは、いくつかの pis、いくつかのSDカード、または両方の組み合わせがありがちであるということを意味するためですプラグが引っ張られたとき、またはプラグが戻されたときに定期的に発生する何らかのイベント(サージ?)によりファイルシステムが破損しています。私も見ていません-多くの人が試す時間は十分あります-誰かがbtrfsやjfsなどに切り替えて問題が解決したと言っている人の報告があります。

これに関する他の不可思議なことは、人々がコードを引っ張っていても、これが定期的に使用できないファイルシステムになってはならないということです。 確かに私はそれをパイで何回もやったことがあり、通常のlinuxボックスで何百回とは言えないにしても得点しました(電源が切れた、システムが反応しなくなった、疲れて怒ったなど)。マイナーなデータ損失はありましたが、ファイルシステムが壊れて、すぐにfsckを実行すると使用できなくなるということはありませんでした。

繰り返しますが、これらすべてのレポートが真実であると想定します(多くの人が嘘をついているのはなぜかわかりません)。単にアンマウントしないだけでなく、さらに多くのことが起こっています。ある種の一般的なハードウェアの欠陥。

パイの上に私が書く-y/forcefsck次回の起動時にそれが自動的に実行されるように、ブートスクリプトで、任意の問題が固定されているにかかわらず、これが必要かどうかのように見えるかどうかの。700 Mhzのシングルコアでは、最大4 GBのデータを含む12 GBのファイルシステムの場合、最大10秒かかります。したがって、「これ書き込み用の小さなファイルシステムです!」とすでに言っているので、「10分」は信じられないほど長い時間のように聞こえます。

sync定期的に呼び出すことも検討してください。

最後に、実際に遭遇した問題のより現実的で具体的な詳細を使用して質問を更新し、誇張を少なくする必要があります。そうでなければ、それは時期尚早なXY問題のように見えるだけで、多くの経験と潜在的なアドバイスを持つ人々によってすぐにスキップされる可能性があります。


実際、私のe2fsckは、e2fsprogs-libsに依存せずにコンパイルできます。私もそれについて疑問に思っていました。(busyboxのバージョンではありません。)しかし、私はそれをまったく望まない...もう少し情報を追加して質問を更新します。
Illishar 14年

libext2fsなしで動作することに驚いています(または静的バージョンをビルドしましたか?または、これは単に異なるパッケージの問題ですか?とにかく...)。ジャーナリングが改善され、可能であればfsckチェックが高速化されたため、ext2ではなくext4をsync選択しました。それとジャーナリングは書き込みサイクルを増加させますが、堅牢性が目標である場合、代替ファイルシステム(たとえば、オンラインチェックを行う理論的なファイルシステム)が同じことを行う必要をどのように回避できるかを理解することは困難です。幸運を祈ります。解決策を見つけたら、答えを追加してください。
goldilocks 2014年

2

プログラムは続けなければなりません!

まあこれは一般的な要件であり、安定したシステムを選択する場合、Linuxシステムが最適です。

あなたの努力も正しい方向に進んでいないようです。しかし、安定したシステムを得るために何ができますか?

最初のレベルでは、ファイルシステムを改善できます。

  • で作成または変更するときyournal_data_orderedに、ext3/ext4ファイルシステムで使用しますtune2fs
  • チェック時にJFS使用--replay_journal_only
  • FSCKFIX=yesinitscriptsで設定して自動修復を有効にします。

これで十分でない場合は、バグのあるディスクをマウントせずにシステムを起動できます。代わりにramdisk、バギーディスクを手動でチェックして修復しながら、新しいディスクを作成します。これはスクリプトで自動化することもできます。

次のレベルでは、組み込みシステムを離れて、高可用性に関するいくつかのトピックを読む必要があります


initscriptの場合、自動チェックはOPが回避しようとしているものです。そのため、ファイルシステムはオンラインファイルシステムチェックをサポートする必要があります。
Bratchley 2014年

1
yournal_data_orderedか、replay_journal_onlyそれがチェックするだけ秒かかり、それは違います。

1
はい、お願いします。オンラインチェックをサポートするファイルシステムをご存知ですか。
Illishar 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.