Logic của bạn không sai. Nhưng nó chỉ có giá trị nếu một số điều kiện được thỏa mãn.
Lệnh TRIM , như được chỉ định trong bộ lệnh ATA , có thể hoặc không thể tạo ra các thành phần mà nó được ban hành.
Trên thực tế, tiêu chuẩn tập trung vào những dữ liệu nào phải được trả về sau khi TRIM được ban hành 1 :
Các hành vi sau được quy định bởi tiêu chuẩn này cho các lĩnh vực mà thiết bị cắt (xem 7.5.3.3):
a) không xác định - dữ liệu phản hồi việc đọc từ một khu vực bị cắt có thể thay đổi cho mỗi lần đọc cho đến khi khu vực đó được ghi bởi máy chủ;
b) Đọc xác định sau khi cắt (DRAT) - dữ liệu được trả về khi đọc của một khu vực bị cắt không thay đổi, nhưng có thể khác với dữ liệu được trả về trước đó; và
c) Đọc số không sau khi cắt (RZAT) - dữ liệu được trả về để phản hồi lại số lần đọc của khu vực được cắt là bằng không.
[...] Đối với cả DRAT và thiết bị lưu trữ không xác định, dữ liệu được trả về để đáp lại lệnh đọc cho LBA đã được cắt xén thành công:
a) có thể là dữ liệu được trả về trước đó cho LBA được chỉ định;
b) có thể là một mẫu được tạo ra bởi thiết bị lưu trữ; và
c) không phải là dữ liệu trước đây được ghi vào một LBA khác bởi máy chủ.
Do đó, những gì thiết bị của bạn trả về sau fstrim
phụ thuộc vào các tính năng mà thiết bị thực hiện. Trừ khi nó hỗ trợ RZAT, giả định rằng dữ liệu đọc từ thiết bị được cắt sẽ chỉ là số không không giữ.
Bạn có thể sử dụng hdparm
để kiểm tra điều này:
sudo hdparm -I /dev/sdX | grep -i trim
Tôi đã thực hiện một số thử nghiệm bằng cách sử dụng hai ổ SSD sda
và sdb
. Cùng một nhà sản xuất, các mô hình khác nhau, với sự phù hợp ATA khác nhau:
$ 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
...
Hai ổ SSD có hỗ trợ TRIM khác nhau:
$ 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
Tôi có thể xác nhận rằng, sau khi phát hành fstrim
, ổ đĩa hỗ trợ "ZERO đọc xác định sau TRIM" (RZAT) dường như thực sự đã loại bỏ hoàn toàn phân vùng liên quan. Ngược lại, ổ đĩa khác dường như bằng không (hoặc thay thế bằng một số mẫu có khả năng nén cao) chỉ là một phần nhỏ của không gian được giải phóng.
1 Nguồn trực tuyến: THU NHẬP 529: Công nghệ thông tin - Bộ lệnh ATA / ATAPI - 4 (ACS-4)
Lưu ý khi kiểm tra:
Như được chỉ ra bởi frostschutz trong các bình luận, việc đọc sau fstrim
có thể trả về dữ liệu từ bộ đệm của hệ điều hành chứ không phải từ thiết bị được cắt xén. Đó là, ví dụ, những gì đã xảy ra trong quá trình đốt cháy này .
(Tôi cũng sẽ chỉ ra câu trả lời này cho cùng một câu hỏi cho một phương pháp thay thế để kiểm tra TRIM).
Giữa fstrim
và lần đọc tiếp theo, bạn có thể cần bỏ bộ đệm, ví dụ:
echo 3 | sudo tee /proc/sys/vm/drop_caches
Tùy thuộc vào kích thước của phân vùng bạn đang chơi, không bỏ bộ đệm có thể đủ để thử nghiệm của bạn thất bại.
Lưu ý về thiết lập của bạn:
Các discard
gắn kết tùy chọn cho phép TRIM liên tục, tức là bất kỳ tập tin thời gian sẽ bị xóa. Nó không được yêu cầu bởi fstrim
. Thật vậy, TRIM theo yêu cầu và TRIM liên tục là hai cách khác nhau để quản lý các hoạt động TRIM. Để biết thêm thông tin, tôi sẽ chỉ đến ổ đĩa trạng thái rắn trên Arch Linux Wiki, nơi có phạm vi chi tiết về vấn đề này.
dmsetup table | grep allow_discards