TRIMがSSDで動作していることを独立して検証

TRIMがSSDで動作していることを独立して検証

開きたいパーティションがありますLUKS/dev/sda1--allow-discards

cryptsetup --allow-discards luksOpen /dev/sda1 root

次に、次のext4オプションを使用してファイルシステムをマウントしましたdiscard

grep /dev/mapper/root /proc/mounts
/dev/mapper/root / ext4 ro,relatime,block_validity,discard,delalloc,barrier,user_xattr,acl 0 0

次に、マウントされたパーティションの空き領域を切り取ります。

fstrim -v /

、空き容量が80%のdfようです。/これは、Windowsでは、/dev/sda1ディスクの80%が2進数ゼロであることを意味します。

イメージを複製するとcat

cat /dev/sda1 > sda1.img

そして、圧縮されたイメージの場合、xzディスク上のすべてのゼロが圧縮されることを望みます。ディスク上のデータの20%が暗号化されているため、ランダムに表示され、圧縮できません。したがって、xzで圧縮された画像は約100倍にする必要があります。元のサイズの20%です。

しかし、結果のxz圧縮画像は、元の画像とサイズがほぼ等しい。

私の推論は正しいですか?

なぜ私の理論を実践に移すことができないのですか?

ベストアンサー1

あなたの論理は間違っていませんでした。ただし、特定の条件が満たされている場合にのみ有効です。

これトリムコマンド,指定どおりATAコマンドセット、発行されたセグメントをゼロにすることも、そうでない場合もあります。
実際、標準はTRIMが発行された後にどのデータが返されるべきかに焦点を当てています1.

この規格は、デバイスクリーンアップされたセクタに対して次の動作を指定します(7.5.3.3を参照)。

a)非決定的 - トリミングされたセクタの読み取りに応答して、ホストがそのセクタに書き込むまで、各読み取りごとにデータが変更されることがあります。
b)トリミング後の決定論的読み取り(DRAT) - 読み取りに応答してセクタが返されるとデータが返されます。切り捨てられたものは変更されませんが、以前に返されたデータと異なる場合があります。 c
) トリム後 0 読み出し (RZAT) - 切り捨てられたセクタ読み出しに応答して返されるデータは 0 です。

[...] DRATおよび非決定的ストレージデバイスの場合、正常にクリーンアップされたLBAの読み取りコマンドに応答してデータが返されます。

a)以前に返された特定のLBAからのデータである可能性があります。
b)ストレージデバイスによって生成されたパターンである可能性があります。 c
)ホストが以前に他のLBAに書き込んだデータではない可能性があります。

したがって、デバイスが返す内容は、fstrim実装する機能によって異なります。 RZATをサポートしていない限り、剪定デバイスから読み取られたデータがゼロにすぎないという仮定は真ではありません。

hdparm次の方法で確認できます。

sudo hdparm -I /dev/sdX | grep -i trim

私は、sda同じsdbメーカー、異なるモデル、異なるATA仕様を持つ2つのSSDを使用していくつかのテストを行いました。

$ sudo hdparm -i /dev/sdb
 ...
 Drive conforms to: Unspecified:  ATA/ATAPI-3,4,5,6,7
 ...

$ sudo hdparm -i /dev/sda
 ...
 Drive conforms to: unknown:  ATA/ATAPI-2,3,4,5,6,7
 ...

2 つの SSD は TRIM を異なる方法でサポートします。

$ sudo hdparm -I /dev/sda | grep -i trim
           *    Data Set Management TRIM supported (limit 1 block)

$ sudo hdparm -I /dev/sdb | grep -i trim
           *    Data Set Management TRIM supported (limit 8 blocks)
           *    Deterministic read ZEROs after TRIM

fstrim「RZAT(Deterministic Read Zeroing After TRIM)」をサポートするドライブは、問題が発生した後に実際に問題のパーティションをほぼ完全にゼロにするように見えることがあります。代わりに、他のドライブは空き領域の小さな部分だけをゼロにする(または圧縮率の高いモードで交換する)ように見えます。

1オンライン ソース:INCITS 529:情報技術 - ATA / ATAPIコマンドセット - 4(ACS-4)


テストノート:

指摘したとおりフロストスーツ注:後続の読み取りでは、クリーンアップされfstrimたデバイスではなくオペレーティングシステムキャッシュからデータを返すことがあります。たとえば、次のようなことが発生します。この問題
(私も指摘したい。この回答TRIMの同じ質問テストの代替案の場合)。

次の読み取りの間にキャッシュを削除する必要があるかもしれませんfstrim。たとえば、次のようになります。

echo 3 | sudo tee /proc/sys/vm/drop_caches

使用しているパーティションのサイズによっては、キャッシュを削除しないとテストが失敗する可能性があります。


設定に注意してください。

マウントdiscardオプションを使用すると、継続的なTRIMが可能です。つまり、ファイルはいつでも削除されます。必須ではありませんfstrim。実際、オンデマンドTRIMと継続的なTRIMは、TRIMタスクを管理する2つの異なる方法です。より多くの情報のために私が指摘したいのはSSDArch Linux Wikiにはこれに関する詳細なレポートがあります。

おすすめ記事