ตรรกะของคุณไม่ถูกต้อง แต่จะใช้ได้ก็ต่อเมื่อเงื่อนไขบางอย่างพอใจ
คำสั่ง TRIMตามที่ระบุไว้ในชุดคำสั่ง ATA , หรืออาจจะไม่เป็นศูนย์ภาคมันจะออกมาต่อต้าน
ที่จริงแล้วมาตรฐานมุ่งเน้นไปที่ข้อมูลที่จะต้องส่งคืนหลังจากออก TRIM 1 :
พฤติกรรมการติดตามถูกระบุโดยมาตรฐานนี้สำหรับส่วนที่อุปกรณ์ภายนอก (ดู 7.5.3.3):
a) non-deterministic - ข้อมูลในการตอบสนองต่อการอ่านจากเซกเมนต์ที่ถูกตัดทอนอาจเปลี่ยนไปสำหรับการอ่านแต่ละครั้งจนกว่าโฮสต์จะถูกเขียนโดยโฮสต์;
b) กำหนดอ่านหลังจากตัด (DRAT) - ข้อมูลที่ส่งคืนในการตอบสนองต่อการอ่านของเซกเตอร์ตัดแต่งไม่เปลี่ยนแปลง แต่อาจแตกต่างจากข้อมูลที่ถูกส่งคืนก่อนหน้านี้; และ
c) อ่าน Zeroes After Trim (RZAT) - ข้อมูลที่ส่งคืนเพื่อตอบสนองต่อการอ่านของเซกเตอร์ที่ถูกเล็มเป็นศูนย์
[... ] สำหรับอุปกรณ์จัดเก็บข้อมูล DRAT และที่ไม่ได้กำหนดค่าไว้ข้อมูลที่ส่งคืนเพื่อตอบสนองต่อคำสั่ง read ไปยัง LBA ที่ได้รับการตัดแต่งเรียบร้อยแล้ว:
a) อาจเป็นข้อมูลที่ส่งคืนก่อนหน้านี้สำหรับ LBA ที่ระบุ
b) อาจเป็นรูปแบบที่สร้างขึ้นโดยอุปกรณ์เก็บข้อมูล และ
c) ไม่ใช่ข้อมูลที่เขียนก่อนหน้านี้ไปยัง LBA อื่นโดยโฮสต์
ดังนั้นสิ่งที่อุปกรณ์ของคุณจะส่งกลับหลังจากนั้นfstrim
ขึ้นอยู่กับคุณสมบัติที่ใช้ ยกเว้นว่ารองรับ RZAT ข้อสันนิษฐานว่าข้อมูลที่อ่านจากอุปกรณ์ที่ถูกตัดจะเป็นศูนย์เท่านั้นที่ไม่ได้เก็บไว้
คุณสามารถใช้hdparm
เพื่อตรวจสอบสิ่งนี้:
sudo hdparm -I /dev/sdX | grep -i trim
ผมดำเนินการทดสอบบางอย่างใช้สอง SSDs, และsda
sdb
ผู้ผลิตรายเดียวกันรุ่นต่าง ๆ ที่มีความแตกต่างของ ATA:
$ 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
...
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
ไดรฟ์ที่รองรับ "อ่านค่าเป็นศูนย์หลังจาก TRIM" (RZAT) ดูเหมือนว่าจะมีพาร์ติชันที่เกี่ยวข้องเกือบทั้งหมดเป็นศูนย์ ตรงกันข้ามไดรฟ์อื่นดูเหมือนจะเป็นศูนย์ (หรือแทนที่ด้วยรูปแบบการบีบอัดสูงบางส่วน) เพียงส่วนเล็ก ๆ ของพื้นที่ว่าง
1 แหล่งข้อมูลออนไลน์: INCITS 529: เทคโนโลยีสารสนเทศ - ชุดคำสั่ง ATA / ATAPI - 4 (ACS-4)
หมายเหตุเกี่ยวกับการทดสอบ:
ตามที่Frostschutzชี้ไว้ในความคิดเห็นการอ่านหลังจากfstrim
อาจส่งคืนข้อมูลจากแคชของระบบปฏิบัติการไม่ใช่จากอุปกรณ์ที่ถูกตัด มันเป็นเช่นสิ่งที่เกิดขึ้นในqustion นี้
(ฉันจะชี้ไปที่คำตอบนี้สำหรับคำถามเดียวกันสำหรับวิธีอื่นในการทดสอบ TRIM)
ระหว่างfstrim
และหลังจากอ่านคุณอาจต้องวางแคชเช่นด้วย:
echo 3 | sudo tee /proc/sys/vm/drop_caches
ขึ้นอยู่กับขนาดของพาร์ติชันที่คุณกำลังเล่นอยู่การไม่วางแคชอาจทำให้การทดสอบของคุณล้มเหลว
หมายเหตุเกี่ยวกับการตั้งค่าของคุณ:
discard
ตัวเลือกที่ช่วยให้ติด TRIM อย่างต่อเนื่องเช่นไฟล์เวลาใด ๆ จะถูกลบออก fstrim
มันเป็นเรื่องที่ไม่จำเป็นต้องตาม แท้จริงแล้ว TRIM แบบออนดีมานด์และ TRIM แบบต่อเนื่องเป็นสองวิธีที่แตกต่างกันในการจัดการการดำเนินงานของ TRIM สำหรับข้อมูลเพิ่มเติมฉันจะชี้ไปที่ไดรฟ์ Solid stateบน Arch Linux Wiki ซึ่งมีรายละเอียดครอบคลุมเรื่องนี้
dmsetup table | grep allow_discards