インテルによるとでは、ソリッド ステート ドライブ上に Linux ファイルシステムを作成するときにブロックを破棄しないことが重要です。このドキュメントでは、( mke2fs
2015 年 3 月の の) デフォルトの動作ではブロックを破棄しないことが述べられています。ただし、現在のmke2fs
マニュアル ページには次のように書かれています。
破棄:mkfs 時にブロックを破棄しようとします (最初にブロックを破棄することは、ソリッド ステート デバイスおよびスパース / シン プロビジョニング ストレージで役立ちます)。デバイスが破棄によってデータもゼロになることを通知すると (破棄後、書き込み前の後続の読み取りはすべてゼロを返します)、まだゼロになっていないすべての inode テーブルをゼロとしてマークします。これにより、ファイル システムの初期化が大幅に高速化されます。これはデフォルトとして設定されています。
SSD を手動でフォーマットする場合、コマンドライン-E nodiscard
に追加することでフォーマット中のブロック破棄を防ぐことができますmke2fs
が、ディストリビューションのインストーラーは自動なので、これを行うことはできません。これは心配すべきことでしょうか?
答え1
リンクされたドキュメントは、特定の目的 (Linux カーネル NVME ドライバーの開発とベンチマーク) に役立つようで、エンド ユーザーに対する一般的なアドバイスを示すものではありません。
ext4 は mkfs 時に破棄されないと主張しています...
コアファイルシステム:
- ext4 – デフォルトの拡張オプションでは、ファイルシステムの作成時にブロックを破棄しません。これを保持し、一部の情報で指示されているように「破棄」拡張オプションを追加しないでください。
- xfs – mkfs.xfs では、ブロックを破棄しないように –K オプションを追加します。
...しかし、それは起こります。それが最初に起こるのです。
# mkfs.ext4 /dev/loop0
mke2fs 1.46.4 (18-Aug-2021)
Discarding device blocks: done
Creating filesystem [...]
したがって、すべてのデータを破棄したくない場合は、xfs の場合はmkfs.xfs -K
提案どおりに、ext4 の場合は を使用して、積極的に防止する必要がありますmkfs.ext4 -E nodiscard
。
# mkfs.ext4 -E nodiscard /dev/loop0
mke2fs 1.46.4 (18-Aug-2021)
Creating filesystem [...]
デフォルトの動作が変更されたかどうかはわかりません。私が知る限り、それは常にデフォルトでした。-E 破棄、nodiscard オプションが登場する前は、データを保持する (デフォルトで破棄を無効にする) -K もありましたが、デフォルトで無効になっている破棄を有効にする対応するオプションはありませんでした。
かつてマニュアルページでは nodiscard がデフォルトであると説明されていましたが、コミット履歴のどこにもそれがコードに反映されていないため、おそらくドキュメントの間違いが原因であると考えられます。
mke2fs: -K オプションを廃止し、discard/nodiscard を導入
(実際、このコミットでは、discard と nodiscard の両方がデフォルトであると同時に主張していました。)
nodiscard がデフォルトで、fstrim が 1 週間後まで使用できないようにできれば最高です。Linux はデータをすぐに捨ててしまいます。間違ったデバイスをフォーマットすると、間違いにすぐに気付いたとしても、データ復旧を行うにはすでに遅すぎます。
答え2
率直に言うと、あまり信じていない。
この文書は古いため、正確ではない可能性があります。
また、これは明らかに間違っているかもしれません。歴史的に、その点については多くの誤解があり、ガイドを書いている人たちは、同じ会社の Linux カーネルに貢献している人と必ずしも同じではありません。状況は確かに複雑です。ある SSD の最適化は、別の SSD にとっては最悪のことかもしれませんし、チップセット メーカーはコントローラーの設定を伝える方法を見つけていません。
ただし、NVMe の破棄機能は長い間標準化されており (Intel が関与し、実際には支配的でした)、これが意図された使用法であるため、これが「良い」ものでなかったらかなり驚きます。
全体的に、discard を使用すると SSD により多くの情報が提供されますが、それをどうするかは SSD 次第です。したがって、無視できるほど多くの情報があると動作が悪くなります。これは実際には SSD コントローラー ファームウェアの問題であり、ドライバーの問題ではありません。Linux データセンターで十分にサポートされることに非常に関心のある Intel は、この問題をずっと前に修正したはずです。