電力損失による破損からSSDを保護する方法はありますか?


15

Linux、ローカルWebサーバー、およびPostgreSQLがインストールされたコンシューマターミナルのグループがあります。問題のあるマシンのフィールドレポートを取得していますが、調査の結果、停電が発生したようで、ディスクに何か問題があるようです。

私は、問題は単にデータベースが破損すること、または最近の変更を含むファイルがスクランブルされることであると考えていましたが、他の奇妙な報告があります。

  • 間違った許可を持つファイル
  • ディレクトリになったファイル(たとえば、index.php現在はディレクトリ)
  • ファイルになったディレクトリ
  • スクランブルされたデータを含むファイル

データベースが破損する問題がありますが、それは私が期待できることです。私がもっと驚いたのは、より基本的なファイルシステムの問題です。たとえば、アクセス許可やファイルをディレクトリに変更することです。問題は、最近変更されていないファイル(ソフトウェアコードや構成など)でも発生しています。

これはSSD破損の「正常」ですか?もともとは安価なSSDで起こっていると思っていましたが、有名ブランド(消費者グレード)で起こっています。

FWIW、クリーンブートではautofsckを実行していません(理由はわかりませんが、私は新しいです)。一部の場所にはUPSが設置されていますが、場合によっては適切に実行されないなどがあります。これは修正する必要がありますが、それでも端末の電源を落とすことができます。ファイルシステムはext4です。

質問:システムレベルで問題を軽減するためにできることはありますか?

ハードウェアキャッシュをオフにするか、同期モードでドライブをマウントすることに関する記事をいくつか見つけましたが、この場合に役立つかどうかはわかりません(メタデータの破損と最近の変更ではありません)。また、読み取り専用モードでのファイルシステムのマウントに関するリファレンスも読んでいます。書き込む必要があるため、これを行うことはできませんが、それが役立つ場合は、コードと構成用の読み取り専用パーティションを作成できます。

これはドライブの例ですsudo hdparm -i /dev/sda1

Model=KINGSTON RBU-SMS151S364GG, FwRev=S9FM02.5, SerialNo=<deleted>
Config={ Fixed }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
BuffType=unknown, BuffSize=unknown, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=125045424
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes:  pio0 pio3 pio4
DMA modes:  mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: disabled (255) WriteCache=enabled
Drive conforms to: Unspecified:  ATA/ATAPI-3,4,5,6,7

5
より良いSSDを購入できます。一般的なエンタープライズSSDには、電源障害が発生した場合に機内データの書き込みを完了するのに十分な電力をデバイスに供給するためのコンデンサが組み込まれています。完全にスクランブルされたファイルシステムから回復する必要がないことで節約できるお金は、控えめな追加コストを簡単に正当化します。
マイケルハンプトン

1
まあ、あなたはそれらのすべてを交換なければならなかったと誰も言いませんでした。ただし、交換や新規インストールには、より優れたSSDを使用できます。
マイケルハンプトン

2
「それらをすべて置き換えるのは簡単ではありません」-それは完全にそうです。まず、男のマキオンに購入の決定を伝えます。彼はひどい怠慢と無能による費用の責任を負います。
TomTomの

7
WriteCache=enabled。これは大きな問題です。データベースがあるハードドライブでは、書き込みキャッシュを有効にしないでください。HPなどの一部のベンダーは、まさにこの理由で実際にハードドライブの書き込みキャッシュを有効にしません。
グレッグアスキュー

3
@Yehosefは、OSで書き込みキャッシュを無効にしても、電源が失われたときにドライブがデータを破損するという事実は修正されないことに注意してください。高速性と耐久性消費者向けのSSDのために不揮発性メモリへの書き込みデータは、ファイルに書き込み、残念ながら何もありませんではないかもしれ際に、ハードウェア上の不揮発性ストレージに揮発性キャッシュからデータを取得するためにドライブするためのメカニズム電源障害、エンタープライズSSDのみがそれを行うことができます。信じられないかもしれませんが、私は誰かが多くのコンシューマーSSDを購入したのと同じような状況にありました。
jrh

回答:


14

突然電源が失われると、MLC / TLC / QLC SSDには2つの障害モードがあります。

  • 飛行中およびDRAMのみの書き込みは失われます。
  • プログラム中のNANDセルの下位ページに保存されている保存データを破損する可能性があります。

最初の障害状態は明らかです。電源保護がないと、安定したストレージ(つまり、NAND自体)になく、揮発性キャッシュのみ(DRAM)にあるデータが失われます。同じことが従来のメカニカルディスクでも発生します(それだけでは、fsyncを適切に発行しないファイルシステムに大混乱を引き起こす可能性があります)。

2番目の障害状態はMLC + SSDの問題です。新しいデータを保存するために上位ページビットを再プログラムする場合、予期しない電力損失により下位ビット(つまり、以前にコミットされたデータ)も破壊/変更される可能性があります。

真の、そして最も明白な唯一の解決策は、ハイエンドのRAIDコントローラーによって永遠に行われているように、電力損失保護されたDRAMキャッシュ(一般にバッテリー/スーパーキャップを使用)を統合することです。ただし、これにより、ドライブのコスト/価格が高くなります。一般に、消費者向けドライブには、電力損失で保護されたキャッシュがありません。むしろ、より経済的なソリューションを次のように使用しています。

  • 部分的に保護された書き込みキャッシュ(例:Crucial M500 / M550 / M600 +);
  • NANDはジャーナルを変更します(例:Samsungドライブ、SMART PoR属性を参照)。
  • 特別なSLC / pseudo-SLC NANDリージョンにより、以前のデータを危険にさらすことなく新しい書き込みを吸収します(例:Sandisk、Samsungなど)。

質問に戻ります。Kingstoneドライブは非常に安価なドライブであり、指定されていないコントローラーを使用し、基本的には公開仕様はありません。突然の電力損失が以前のデータを破壊したことは、私を驚かせません。残念ながら、ディスクのDRAMキャッシュを無効にしても(コマンドのパフォーマンスが大幅に低下する)、問題解決しません。以前のデータ(保存データ)が予期せぬ電力損失によって破損する可能性があるためです。古いSandforceコントローラをベースにしている場合、「適切な」状況では完全なドライブブリックでさえ期待できます。

UPSを見直し、中期的にはこれらの老朽化したドライブを交換することを強くお勧めします。

PostgreSQLと他のLinuxデータベースに関する最後の音:彼らはなりません、ディスクのキャッシュを無効にしなければならないではないことをやってexptectedします。むしろ、定期的/必要なfsync / FUAを発行して、キーデータを安定したストレージにコミットします。これは、非常に説得力のある理由(つまり、ATA FLUSHES / FUAに関連するドライブ)が存在しない限り、物事を行う方法です。

編集:可能であれば、チェックサムファイルシステムへのZFSまたはBTRFSとしての移行を検討してください。少なくとも、ジャーナルのチェックサムと、最近ではメタデータのチェックサムも備えたXFSを検討してください。EXT4の使用を強制されている場合は、起動時にauto-fsckを有効にすることを検討してください(fsck.ext4は修復の破損に非常に適しています)。


素晴らしい答え。関連する質問serverfault.com/questions/924054 / ...を参照してください-この回答をコピー/適応したい場合は、喜んで投票/選択してください。書き込みキャッシュを無効にすると、最初の場合にのみ役立つようです。2番目の障害モードの詳細はありますか?リバランス/ガベージコレクションに接続されているのですか、それとも単に近接しているのですか?
エホセフ

1
:「電力損失」セクションで、ここ外観を与える@Yehosef anandtech.com/show/8528/...
shodanshok

1
ソフトウェアソリューションの問題は、fsync / FUAコマンドへの応答を含め、データが安全に保存されているかどうかについて多くのSSDがオペレーティングシステムに完全に依存していることです。停電時にキャッシュのフラッシュを完了するのに十分なエネルギーストレージを持つエンタープライズドライブの場合、これは問題ではありません。
BeowulfNode42

@ BeowulfNode42 ATAの障壁とFUAは尊重される必要があります。IDE / PATA時代には一部のドライブがフラッシュを偽造していましたが、今日ではそのような「嘘つき」ドライブはSATA / SASに準拠していないため、すぐに捨てなければなりません。
shodanshok

それでも、これらの非準拠ドライブは、特に消費者市場セグメントで販売されています。
BeowulfNode42

11

うん。超安価なSSDを入手しないでください。ローエンドの消費者市場以外には、コンデンサと電力損失に対する完全な保護機能があります。Amdの費用はそれほどかかりません。


彼らはキングストンです-だからそれらが安いと考えられているのか、それとも欠陥のあるロットなのかわかりません。より大きな問題は、ユニット(〜6k)がすでにフィールドにあり、ほとんどが故障していないことです(おそらく、電力損失がないためです)。したがって、それらを交換することは、私たちがまだ打っていない高価な最後の手段です。
エホセフ

質問にドライブ情報を追加しました。
イェホセフ

5
彼らはとても安いです。これらは価格重視のエンドユーザードライブです。小規模なエンタープライズドライブを探します。仕様をお読みください。一般に、停電保護は仕様に含まれるものです。
TomTomの

1
@TomTomに追加する-実際には停電保護と呼ばれないこともあります-そして、停電保護は実際には本当に停電保護ではありません!各メーカーについて読み、特定のブランドのエンタープライズSSDについてそれが何と呼んでいるかを調べる必要があります。(各mfrについて、自社のエンタープライズSSDがどれほど真に優れているかについて書いたホワイトペーパーをご覧ください。)そして、少なくとも1回の購入の場合、かなり費用かかることがわかりました。しかし、私は大量購入をしません、そして、それは100以上の量のために異なっているかもしれません、と思います。
davidbak

3
私がこれまでに読んだことから、これらの製造業者はこの機能の名前を次のように持っています。Samsung = "電力損失保護"; Intel =「強化された電力損失データ保護」。Sandisk = "電源障害保護によるデータ損失保護"。他のメーカーが何と呼んでいるのかわかりませんが、仕様書を詳しく読む必要があります。製造元から提供されている場合は、ファームウェアでも実現できます。本当に6000以上ある場合は、キングストンに連絡して状況を説明し、ドライブごとにファームウェアの支払いを申し出ます。
BeowulfNode42

7

最初に行うことは、復旧時間と復旧ポイントの目標を定義することです。これらの端末の1つを回復するのにどれくらいの期間が必要ですか?また、どのデータポイントが許容されますか?おそらく数時間以内に、先週のバックアップに回復できる必要があります。

飛行中の書き込みが失われると、ファイルにあらゆる種類の奇妙なことが起こります。ファイルシステムの優先度は、独自のメタデータの一貫性を維持することであり、データに対して同じ保証を提供しない場合があります。言い換えれば、fsckデータの回復が保証されているわけではありません。その仕事は、マウントするファイルシステムを取得することです。

だから、力。UPSがシステムを正常にシャットダウンすることをインストール、構成、およびテストします。これにより、ファイルシステムキャッシュとドライブ自体が書き込みできるようになります。

そして、ディスクへの書き込みの耐久性。PostgreSQLの信頼性の章を読んでください。diskchecker.plそこにリンクされているスクリプトを使用してクラッシュテストを実行し、書き込みが不揮発性ストレージに到達したかどうかについてSSDが嘘をついているかどうかを判断します。損失がある場合は、電力損失保護があることが知られているSSDと交換することを検討してください。

編集:書き込みキャッシュが有効になっているという詳細を追加しました。それを無効にしようとすることができます:hdparm -W0 /dev/sdaまたはハードウェアアレイの適切なコマンド。参照: RHELストレージ管理ガイド

ファイルシステムの書き込みバリアは、ジャーナルコミットの順序を強制します。データが無傷であることを保証するものではありませんが、揮発性キャッシュを備えたファイルシステムにとっては安全です。これはデフォルトですが、「バリア」マウントオプションを追加すると、パフォーマンスよりも一貫性を重視することが明確に文書化されます。

最後に、最後の防衛線。復元テストを実行して、アプリケーションとデータベースを目的の時点に到達できることを確認します。これは、停電だけでなく、あらゆる種類のデータ損失に役立ちます。


このディスク書き込みキャッシュがおそらく答えです。何らかの未知の理由で、Postgresはディスク書き込みキャッシュを無効にしないようです。これは恐ろしいデフォルト設定です。
グレッグアスキュー

1
明確にするために-私たちは毎日のバックアップがあり、データをクラウドに同期しているので、問題はPostgresデータを失うこととはあまり関係がありません(心配ですが、役立つPG設定オプションがあると思います)。さらに懸念される問題は、メタデータの奇妙さに関連してマシンが使用できなくなることです。FWIW、通常はマシンが起動し、接続できますが、ファイルがスクランブルされているため、アプリケーションは失敗します。
イェホセフ

1
「Postgresはディスク書き込みキャッシュを無効にしないようです。これはひどいデフォルト設定です。」@GregAskew coimsumer SSDでDRAMキャッシュを無効にする方法をデモしてください。無効にすることはできません。
TomTomの

4
SSDの動作方法のため。書き込みキャッシュがなければ、SSDをはるかに速く焼き切ることになります。SSDセルは大きく、常に完全に書き込む必要があります。そのため、複数の小さな書き込みを組み合わせる機能はSSDの寿命にとって重要です。コンシューマードライブでは無効にできない(ドライブが存在するか、許可しない)か、エンタープライズドライブでは実行できない(ドライブは基本的に不揮発性なので、ドラムを書き込むのに十分なエネルギーリザーブがあるフラッシュアウト
TomTom

3
@Yehosefいいえ、信頼できないPostgresでも、ドライブにデータを送信すると回復する魔法の力があります。ドライブは「良い、データを取得しました」と言い、ドライブは内部の一時的なvolatile実際の不揮発性ストレージにキャッシュします。ドライブまたはRAIDユニットの内部キャッシュがバッテリーまたはコンデンサーによってバックアップされているエンタープライズ品質のストレージのみを使用することが重要です。Postgresには、まだドライブに送信されていないデータが失わないようにする機能(WALファイルなど)がありますが、Postgres はドライブ内で失わたデータを回復できません。
バジルブルク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.