"fstrim"を使用すると、毎回利用可能なすべてのブロックが記録されますか?

"fstrim"を使用すると、毎回利用可能なすべてのブロックが記録されますか?

LVMとdm-cryptを含む500G SSDディスクを持つUbuntu 18.04サーバーがあります。最近、ディスクに書き込まれたバイト数が(またはで報告されているvmstat -dようにiostat)非現実的に高いことがわかりました。システムI / OIを監視した後、fstrim.serviceランタイム中に週に1回のディスク書き込みが大幅に急増することがわかりました。

書き込みバイト数

fstrimログを見ると、システムはほぼアイドル状態で、最大1週間に10 Gb未満が記録されていますが、デフォルトで利用可能なすべてのスペースがディスクに書き込まれたことを毎週実行報告するようです。

これが予想される動作ですか?私はfstrim毎回空きスペース全体を破棄するのではなく、最後の実行以降に新しい空きブロックだけを破棄する必要があると常に考えました。これにより、SSDに異常に高い摩耗が発生します(ディスクで報告されたメディアの摩耗値によって判断されます)。それとも存在と関係がありますかdm-crypt

ディスクはTRIMをサポートします。

hdparm -I /dev/sda | grep TRIM
  *    Data Set Management TRIM supported (limit 8 blocks)
  *    Deterministic read ZEROs after TRIM

また、ドロップ転送も有効になりましたdm-crypt

dmsetup table
  silverbox--vg-swap: 0 19529728 linear 253:0 917964800
  silverbox--vg-root: 0 917962752 linear 253:0 2048
  sda3_crypt: 0 937496576 crypt aes-xts-plain64 00...0 0 8:3 4096 1 allow_discards

答え1

ATAtrimコマンドはディスクドライブのメタデータのみを変更し、ストレージデバイスへの低レベルの書き込みはまったく行いません。ディスクがdeterministic trimトリミングブロックをサポートしている場合は0が返されますが、これはコマンドの実行時にセルが実際に消去されたためではなく、新しいメタデータの状態に基づいてコントローラによって実行されますtrim

trim残念ながら、私が知っているすべてのカーネル統計では、このコマンドは書き込みと見なされます。だから、週iostatsar/sys/fs/ext4/*/lifetime_write_kbytes実際の書き込みと剪定の合計。また、見ることができますスーパーユーザーに関する質問

fstrim週に 1 回このタスクを実行すると、未使用のディスク容量全体が解放されるようです。たとえば、50%使用された1 TBディスクがある場合、デフォルトのアクティビティfstrimは統計に1週間あたり500 GBの書き込みまたは1日の書き込みで70 GBとして表示されます。

結論は次のとおりです。書き込み統計は、特に適切に満たされたファイルシステムでは、書き込みとして計算されるクリーンアップによって容易に支配されます。

関連情報