fstrim 再起動後にすべての空き領域をトリミングする

fstrim 再起動後にすべての空き領域をトリミングする

SSD にアップグレードしました。パフォーマンスは素晴らしいです。

ただし、再起動のたびにパーティションに対して fstrim を実行すると、すべての空き領域がトリミングされます。また、私の理解では、トリミングは使用可能なすべての空き領域に書き込みます。関連があるかどうかはわかりませんが、私はフルディスク暗号化 (/boot を含む) を使用しています。

頻繁に書き込みを行うと SSD の寿命が劇的に短くなる可能性があるため、このトリミングについては心配です。

以下に、トリミングのたびに記録するログを示します。

Jul 30 13:46:00 /: 478.6 MiB (501862400 bytes) trimmed
Jul 31 13:22:26 /: 347.8 GiB (373409230848 bytes) trimmed
Jul 31 13:25:32 /: 194.3 MiB (203710464 bytes) trimmed
Jul 31 13:25:40 /: 19.2 MiB (20111360 bytes) trimmed
Aug 02 14:08:06 /: 345.9 GiB (371398463488 bytes) trimmed
Aug 02 22:21:36 /: 56.9 GiB (61047971840 bytes) trimmed
Aug 02 22:31:27 /: 347.7 MiB (364560384 bytes) trimmed
Aug 02 22:31:43 /: 127 MiB (133144576 bytes) trimmed
Aug 02 22:33:01 /: 243 MiB (254767104 bytes) trimmed
Aug 03 06:58:47 /: 1 GiB (1080602624 bytes) trimmed
Aug 03 10:00:02 /: 2.4 GiB (2526216192 bytes) trimmed
Aug 03 11:42:14 /: 341 GiB (366146318336 bytes) trimmed
Aug 03 16:00:01 /: 0 B (0 bytes) trimmed
Aug 03 16:33:53 /: 0 B (0 bytes) trimmed
Aug 03 16:48:43 /: 341 GiB (366074740736 bytes) trimmed
Aug 03 16:50:13 /: 1.2 GiB (1297809408 bytes) trimmed
Aug 03 16:53:31 /: 341 GiB (366074695680 bytes) trimmed
Aug 03 17:07:55 /: 340.9 GiB (366066126848 bytes) trimmed
Aug 05 22:00:13 /: 341 GiB (366073069568 bytes) trimmed
Aug 05 22:07:22 /: 1.2 GiB (1261793280 bytes) trimmed
Aug 06 07:41:50 /: 1.4 GiB (1522991104 bytes) trimmed
Aug 06 10:00:11 /: 341 GiB (366068740096 bytes) trimmed

ご覧のとおり、コンピューターの電源を入れた後のトリミングは約 340 GiB ですが、通常の使用時のトリミングはわずか 1 GiB 程度です。

これによって SSD が消耗してしまうのではないかと心配すべきでしょうか? トリミングしないほうがよいでしょうか?

答え1

誤解があります。トリミングは余分な書き込みを引き起こすのではなく、減少する彼ら。

SSD、あるいはそのNANDには「ブロック」という概念が2つあり、そのうちの1つは実際にはブロック(通常は128kから512k程度)そして、ファイルシステムの「ブロック」という言葉で意味するものにもっと近いものがページ(通常は4kくらい)。書く古いハードディスクと同じように、一度に 1 ページ全体を書き出すと、問題はありません。期待どおりに動作します。

ただし、上書きする1ページにつき1回のみ書き込み可能です。消去する再び書き込み可能になります。これがNANDの寿命にカウントされます。問題は…実際にはできないページを消去します。消去できるのはブロック(つまり、一度に 32 ~ 64 ページのクラスター)。

つまり、ページ (ファイルシステムの観点では「ブロック」) を上書きする場合、コントローラーは次の操作を実行する必要があります。

  1. ブロック全体を読み込む
  2. 「未使用」またはすでに消去されたブロックが存在する場合は、それを使用します
  3. さもないとクリア同じブロック
  4. 上書きされたページの内容を変更して、ブロック全体を書き出す
  5. 何らかの不特定の「魔法」を実行して、消去サイクルがすべてのブロックに均等に分散され、早期の消滅を防ぐ

少し単純化していますが、原理はこんな感じです。頭いいコントローラーは若干異なる処理を実行する可能性があります (たとえば、ページを論理的に再マップし、ページがなくなるまですべてのページを埋め、どのページが適切でどのページが古いかを何らかの方法で「記憶」するなど) が、原則としてワークフローは上記のとおりです。

これは、小さな書き込みが一般的であるため、ディスク上のすべてのブロックが少なくとも 1 回は書き込まれるという点で問題です。では、コントローラは何ができるでしょうか。あまりできません。ファイルシステムが何をしているのか、何が期待されているのかをコントローラは実際には知らないため、最も保守的な仮定に基づいて動作する必要があります。つまり、一度書き込まれたものはすべて保存する必要があります。

TRIMはこの問題を解決します。コントローラに、これこれの大きな範囲を指示します。使用されていないなので、コントローラはそれを破棄することもできます。何も書き込まない。もし書き込むとしても、ブロックを消去するだけです(ただし、毎回ではなく、1回だけです)。
コントローラにそのデータを使用していないことを伝えたので、コントローラはそれを無害に破棄するリスクがあります。これで、データをコピーしたりブロックを繰り返し消去したりすることなく、書き込み可能なブロックが再び利用可能になります。これにより、書き込みが簡単になるだけでなく、もっと早く消去の回数も減ります。

答え2

fstrim解放されるようだ全てパーティションの空き領域。 の最後の呼び出し以降に解放された領域だけではありませんfstrimこの投稿

関連情報