開きたいパーティションがあります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にはこれに関する詳細なレポートがあります。
答え2
SSDにはハードウェア暗号化層が組み込まれていますか? 1つがある場合、TRIMmedブロックはネイティブハードウェアレベルですべて0(またはすべて1)にすることができますが、コンピュータは暗号化層を介してこれを検証するため、すべての暗号化層を通過した後に擬似ランダムな横断説として表示されます。 。 - 復号化プロセスによって元のブロックをゼロ化します。
これらのハードウェア暗号化層には、次のようないくつかの利点があります。
- 非常に高速なセキュリティ削除機能が可能です。ドライブがハードウェア暗号化層で使用されていた元のキーを破棄して新しいキーに置き換えると、ほとんどの実用的な目的のためにすべてのデータを即座に回復することはできません。
- 生のハードウェアレベルに達するすべてのデータは暗号化されており、擬似ランダムに表示されるため、ほぼ均質です。これは、熱いまたは冷たい点を避け、摩耗推定を大幅に簡素化するのに役立ちます。
答え3
破棄はゼロと同じではありません。
cryptsetupを使用してゼロ化するには、fsを縮小してからcryptブロックを縮小し、未使用のボリュームスペースを追加します。
剪定が効果的かどうかを知りたい場合は、頻繁に使用した後に速度テストを行うことが指標になるはずです。
https://linux.die.net/man/8/fstrim https://en.m.wikipedia.org/wiki/Trim_(計算)
答え4
df
空きスペースを報告してもスペースが空になったという意味ではありません。
trim
そのブロックが使用されていないことをストレージデバイスに通知します。私はそれがゼロになるとは思わない。