無人で実行されるシステム用の「安全な」ext4構成


18

Linuxを実行しているシステムがあり、長時間無人で実行する必要があります。システムは、ストレージに産業用CFカードを使用します。ほとんどの場合、フラッシュへの書き込みはありませんが、時々、いくつかの構成データ/設定を変更できます。システムは電源障害に耐える必要があります。

これにはext4を使用したいと思います。この種のセットアップのためにext4を設定する最良の方法は何ですか?次のことに留意してください。

  • パフォーマンスはまったく問題ありません(特に書き込みパフォーマンス)
  • 停電時には、最後の数秒間に書き込まれたデータが失われたとしても、システムは常にクリーンな状態で起動する必要があります
  • fsckを回避できる場合は、それでもなお良いです。

(私はこの関連する質問を知っています: 停電時のext4 / Linuxドライブのデータ破損を防ぎます

回答:


11

私はボートの自動化システムの構築に取り組んできましたが、前提条件がありました。すべての瞬間にパワーが低下し、すべてが再び正しくブーストしなければなりません。

私の解決策は、アプリケーションと設定用のrwフォルダーのみで、Gentooベースのinitramfsシステムを構築することでした(これは、すべてのルーター/ファイアウォールベンダーが使用するアプローチです)。このソリューションは、システムのアップグレードを処理する際に複雑さの層を追加しますが、システムが常に起動することを保証します。

あなたの特定の質問について、あなたはEXT4おくべきジャーナルが有効に使用し、より高速のfsck(数secodsの)を有するために=ジャーナルデータを下げて、マウントオプションをコミットオプションまたは使用の同期は常に空のバッファを保持するオプションを。

参照:http ://www.kernel.org/doc/Documentation/filesystems/ext4.txt


良い!アプリケーションが大量のデータを書き込まない場合は、同期オプションに満足する必要があります。
ジョヴァンニトラルド

1
見るべきより良い場所は、Linuxカーネルのドキュメントです:kernel.org/doc/Documentation/filesystems/ext4.txt潜在的なデータ損失を最小限に抑えるためにdata = journalおよびcommit = nrsecを有効にします(* == default)
Giovanni Toraldo

時限コミットは間違いなく役立ちます-書き込み集中型の操作ではパフォーマンスが大幅に低下しますが、1秒までしか取得できないと思いますが、1秒のデータ損失が許されないと大きな問題が発生します;)
voretaq7

2
ジャーナリングの主なプラス効果の1つは、クラッシュからの回復は、コミットされていない最新の変更をリプレイすることであり、ボリューム全体の不整合をチェックするよりも本当に速いことです。これが主な問題である場合は、デフォルトのEXT4を使用して満足する必要があります。
ジョヴァンニトラルド

1
@Grodriguezの「失われた」データは、「ファイルがもう存在しない」から「データベース内にカーネルの塊があるのはなぜですか」から何でもかまいません。-それはすべて「失われた」ものに依存します:)
voretaq7

12

私はこれに関して、私に関する限り、EXT(そのすべての化身で)はかなりひどいファイルシステムであると言って言います- 比較的少数のLinux / EXTでのファイルシステム破損の「興味深い」ケースを見てきました私が使用する機会があった比較的多数の非EXTファイルシステムにある{2,3,4}システム。
可能な限り、より堅牢なファイルシステムを選択してください。避けられない事態が発生したとき、あなたは自分自身に感謝します。


そうは言っても、私の個人的な偏見はすべて公開されており、EXT4には3つの機能があります。


  • 必要に応じて、ジャーナリング EXT4をジャーナルファイルシステムにすることができます。ジャーナリング機能を有効にします(具体的には、データジャーナリングモードをjournalvia tune2fsオプションまたはマウントオプションとして設定します)。
    ファイルシステムに「コミット」される前にすべてのデータをEXTジャーナルに書き出す必要があるため、パフォーマンスが低下します(すべての書き込みは基本的に2回発生します)が、ジャーナルのリプレイがなくても常に回復できることを保証します問題。

  • SYNChronous Mounts
    安全性が最優先の場合、syncオプションを使用してファイルシステムをマウントすることは常に良い考えです。これにより、すべてのディスクへの書き込みがすぐに強制されます。これもパフォーマンスヒットですが、電源障害やランダムな見知らぬ人がCFカードを引っ張ってくることが予想される場合は良い考えです。

  • 書き込み可能なファイルシステムを可能な限り制限する これはEXT固有のものではありませんが、「1つの大きなルートパーティションを作成してそこにすべてをダンプする」という一般的なLinux哲学は、率直に言って愚かです。適切なファイルシステム構造を作成します(//var/usr/home、など)、およびファイルシステムの多くは、読み取り専用としてできるだけマウント。
    これはセキュリティのためにUNIXシステムの一般的なアドバイスでしたが、あなたの場合には追加の利点があります:ファイルシステムに書き込めなければ、ファイルシステムを破壊することはできません。


完全に同期マウントの機能はありません単純に呼び出すことに相当しsync、すべての書き込みの後に-同期マウントしません(あるいは少なくともべきではありません)ファイルシステムの書き込みコールからのリターンのデータがディスク上にあるまで。呼び出しsyncは保留中のすべての書き込みをフラッシュしますが、書き込みが返ってからsyncデータがまだディスクに書き出されていない可能性があるリターンへの呼び出しの間にはまだウィンドウがあります(短い)。
voretaq7

どのファイルシステムをお勧めしますか?体験を定量化できますか?
マークワーグナー

@embobo私の経験は完全に逸話です:EXTファミリーのファイルシステムをストレステストしたことは一度もありませんが、頭に浮かぶ1つの出来事は、Squidサーバーが「すべてのiノードがどこに行ったのか!?」-ファイルシステムは踏みつけられ、その後何らかの理由でクリーンとマークされましたが、すべてのiノードは何らかの形で主張されているが参照されていない状態のままになりました。その特定の混乱を修正するためのfsckは積極的にEPICでした(新しいFSを作成しただけです)。その日は、EXTファミリーのファイルシステムに対する信頼をすべて失いました。
voretaq7

@Grodriguez Re:ジャーナリング、3つのオプションはdata=journal(上記で説明した)、data=ordered(メタデータがジャーナリングされます。メタデータがファイルシステムにコミットされる前にデータがディスクにコミットされます)、およびdata=writeback(事実上データのジャーナリング/保護なし-Bad Thingsファイルの途中で迷惑メールのように、クラッシュ後に発生する可能性があります)。ordered最近のほとんどのLinuxディストリビューションのデフォルトだと思います
...-voretaq7

2
「書き込み可能なファイルシステムを可能な限り制限する」に加えて:debian wikiでは、特別な処理を必要とするデーモンの多くの例を使用してこれを正確に行うためのガイドです。他のほとんどのディストリビューションでも有効であるはずです:wiki.debian.org/ReadonlyRoot
krissi

7

EXT4は、システムに最適な選択肢ではありません。ログ構造のファイルシステムを見ることをお勧めします。これらは、最新の「ヘッド」を指すポインターを使用して、仮想ストリームに対する書き込み更新の一定のストリームとしてデータを処理することにより機能します。更新は、データとメタデータをストレージに書き込んでから、ポインターを更新することにより行われます。書き込み後、ポインタ更新前のクラッシュの場合、最新のデータは失われますが、ファイルシステムは一貫しています。

2つの候補ファイルシステムはLogFSNILFSです。どちらもメインラインLinuxカーネルで利用可能です。


1

私はあなたの建物のデバイスに興味を持っています。あまり適していないファイルシステムを使用しながら、組み込みデバイスの信頼性を追求しています。

Ext4(およびファミリ)は、さまざまなハードウェアおよびユースケースで何十億時間も使用されている(おそらく)すばらしい汎用ファイルシステムです。しかし、あなたが求めているものは、ext4には実際には合いません。voretaq7とGiovanniからのポインターは、必要に応じてext4を最大限に活用するのに役立ちますが、実際の答えは、要件により適したものを使用することです。スティーブはいくつかのオプションを提供しました。ext4 FSから電力を引き出し続けると、最終的に混乱が生じます。

これが構築している1回限りのシステムである場合は、より適切なものを使用するか、ある時点で問題が発生することを受け入れるかを選択する必要があります。これは、100回のうち1回または1000回のうち1回の停電にすぎない可能性があります。これはリスクを負うのに十分であり、デバイスは手動介入なしで長時間(年)動作する可能性があります。

これが広く展開/市場投入する予定の製品である場合は、より適切なものを使用することもできます。または、毎年ブリックするデバイスの一部をサポートするビジネス上の決定を下し、それらを回復するには交換または手動の介入が必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.