Logika Anda tidak salah. Tetapi itu hanya valid jika beberapa persyaratan dipenuhi.
The perintah TRIM , sebagaimana ditentukan dalam ATA perintah set , mungkin atau mungkin tidak nol sektor itu dikeluarkan terhadap.
Sebenarnya, standar ini berfokus pada data apa yang harus dikembalikan setelah TRIM dikeluarkan 1 :
Perilaku tindak ditentukan oleh standar ini untuk sektor-sektor yang dipangkas perangkat (lihat 7.5.3.3):
a) non-deterministik - data dalam menanggapi pembacaan dari sektor yang dipangkas dapat berubah untuk setiap pembacaan sampai sektor ini ditulis oleh tuan rumah;
b) Deterministic Read After Trim (DRAT) - data yang dikembalikan sebagai respons terhadap pembacaan sektor yang dipangkas tidak berubah, tetapi mungkin berbeda dari data yang sebelumnya dikembalikan; dan
c) Baca Zeroes After Trim (RZAT) - data yang dikembalikan sebagai respons terhadap pembacaan sektor yang dipangkas adalah nol.
[...] Untuk DRAT dan perangkat penyimpanan non-deterministik, data dikembalikan sebagai respons terhadap perintah baca ke LBA yang telah berhasil dipangkas:
a) mungkin data yang sebelumnya dikembalikan untuk LBA yang ditentukan;
b) mungkin merupakan pola yang dihasilkan oleh perangkat penyimpanan; dan
c) bukan data yang sebelumnya ditulis ke LBA yang berbeda oleh tuan rumah.
Jadi, apa yang dikembalikan perangkat Anda fstrim
tergantung pada fitur yang diterapkannya. Kecuali jika ia mendukung RZAT, asumsi bahwa data yang dibaca dari perangkat yang dipangkas hanya nol yang tidak berlaku.
Anda dapat menggunakan hdparm
untuk memeriksa ini:
sudo hdparm -I /dev/sdX | grep -i trim
Saya melakukan beberapa tes menggunakan dua SSD, sda
dan sdb
. Pabrikan yang sama, model yang berbeda, dengan kesesuaian ATA yang berbeda:
$ 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
...
Kedua SSD memiliki dukungan berbeda untuk 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
Saya dapat mengkonfirmasi bahwa, setelah mengeluarkan fstrim
, drive yang mendukung "Deterministic read NERO after TRIM" (RZAT) tampaknya benar-benar memusatkan perhatian pada partisi yang bersangkutan hampir seluruhnya. Sebaliknya, drive lain tampaknya memusatkan perhatian (atau diganti dengan beberapa pola yang sangat kompresibel) hanya sebagian kecil dari ruang yang dibebaskan.
1 Sumber online: INCITS 529: Teknologi informasi - ATA / ATAPI Command Set - 4 (ACS-4)
Catatan tentang pengujian:
Seperti yang ditunjukkan oleh frostschutz dalam komentar, baca setelah fstrim
dapat mengembalikan data dari cache sistem operasi, dan bukan dari perangkat yang dipangkas. Misalnya, apa yang terjadi dalam qustion ini .
(Saya juga akan mengarahkan jawaban ini ke pertanyaan yang sama untuk metode alternatif untuk menguji TRIM).
Antara fstrim
dan bacaan berikutnya Anda mungkin perlu menjatuhkan cache, misalnya dengan:
echo 3 | sudo tee /proc/sys/vm/drop_caches
Bergantung pada ukuran partisi yang Anda mainkan, tidak menjatuhkan cache mungkin cukup untuk pengujian Anda gagal.
Catatan pada pengaturan Anda:
The discard
mount option memungkinkan TRIM terus menerus, yaitu file waktu akan dihapus. Tidak diwajibkan oleh fstrim
. Memang, TRIM atas permintaan dan TRIM berkelanjutan adalah dua cara berbeda untuk mengelola operasi TRIM. Untuk informasi lebih lanjut, saya akan menunjuk ke solid state drive di Arch Linux Wiki, yang memiliki cakupan terperinci tentang masalah ini.
dmsetup table | grep allow_discards