私はddを使って高速SSDを上書きしようとしました。私が入力したUbuntuブートイメージを使用して:
dd if=/dev/zero of=/dev/sda bs=100M
error writing '/dev/sda': No space left on device
blah blah
256 GB copied, 1195.81 s 214 MB/s
これはとても遅いですか?そしてボトルネックはどこにありますか?ブロックサイズの選択はどうですか?
答え1
人間が一般的に好む最適なブロックサイズはdd
約です64k
。256k
1M
実際の入出力なしのベンチマーク:
$ for bs in 512 4k 16k 64k 128k 256k 512k 1M 4M 16M 64M 128M 256M 512M
> do
> echo ---- $bs: ----
> dd bs=$bs if=/dev/zero of=/dev/null iflag=count_bytes count=10000M
> done
---- 512: ----
20480000+0 records in
20480000+0 records out
10485760000 bytes (10 GB) copied, 4.2422 s, 2.5 GB/s
---- 4k: ----
2560000+0 records in
2560000+0 records out
10485760000 bytes (10 GB) copied, 0.843686 s, 12.4 GB/s
---- 16k: ----
640000+0 records in
640000+0 records out
10485760000 bytes (10 GB) copied, 0.533373 s, 19.7 GB/s
---- 64k: ----
160000+0 records in
160000+0 records out
10485760000 bytes (10 GB) copied, 0.480879 s, 21.8 GB/s
---- 128k: ----
80000+0 records in
80000+0 records out
10485760000 bytes (10 GB) copied, 0.464556 s, 22.6 GB/s
---- 256k: ----
40000+0 records in
40000+0 records out
10485760000 bytes (10 GB) copied, 0.48516 s, 21.6 GB/s
---- 512k: ----
20000+0 records in
20000+0 records out
10485760000 bytes (10 GB) copied, 0.495087 s, 21.2 GB/s
---- 1M: ----
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB) copied, 0.494201 s, 21.2 GB/s
---- 4M: ----
2500+0 records in
2500+0 records out
10485760000 bytes (10 GB) copied, 0.496309 s, 21.1 GB/s
---- 16M: ----
625+0 records in
625+0 records out
10485760000 bytes (10 GB) copied, 0.972703 s, 10.8 GB/s
---- 64M: ----
156+1 records in
156+1 records out
10485760000 bytes (10 GB) copied, 1.0409 s, 10.1 GB/s
---- 128M: ----
78+1 records in
78+1 records out
10485760000 bytes (10 GB) copied, 1.04533 s, 10.0 GB/s
---- 256M: ----
39+1 records in
39+1 records out
10485760000 bytes (10 GB) copied, 1.04685 s, 10.0 GB/s
---- 512M: ----
19+1 records in
19+1 records out
10485760000 bytes (10 GB) copied, 1.0436 s, 10.0 GB/s
- デフォルトの
512
バイト速度は非常に遅いです(512バイトあたり2つのシステムコールはCPUに多すぎます)。 4k
比較する512
16k
比較する4k
64k
- すでに256k
最高512k
-4M
もう少し遅い16M
-速度は半分512M
、それよりも悪い4k
。
私の考えでは、特定のサイズから始めると、並行性の欠如のために速度が低下し始めるようです。 dd は単一プロセスです。並行性は主にカーネルによって提供されます(事前読み込み、キャッシュされた書き込み...)。 100Mを書き込む前に100Mを読み取る必要がある場合、デバイスは時々他のデバイスが読み書きを完了するのを待ち、アイドル状態になります。ブロックサイズが小さすぎると、膨大なシステムコールオーバーヘッドが発生しますが、約64kではこれが完全に消えます。
同じデバイスからコピーしたり、同じデバイスにコピーしたりすると、100M以上のブロックサイズが役に立ちます。少なくともハードドライブの場合は、2つの場所に同時に配置することはできないため、これを見つけるのに無駄な時間を節約できます。
SSDをこのように上書きする理由は何ですか?通常、SSDへの不要な書き込みを避けたいと思います。使用されているすべてのスペースを考慮すると、再クリーンアップするまで一部のパフォーマンスが低下する可能性があります。
このコマンドを使用して、SSD全体をクリーンアップ/廃棄できます。
blkdiscard /dev/sda
SSDにhdparm -I
TRIM以降の決定論的な読み取りゼロがある場合(該当するプロパティを使用して確認できます)、0でいっぱいに見えますが、SSDは実際にすべてのブロックを利用可能なブロックとして扱うため、最高のパフォーマンスを提供します。
TRIMの欠点は、削除されたファイルを破棄すると、データ復旧の可能性をすべて失うことです。