Ssd
文件系統 (ext4) 如何“儲存”TRIM 資訊?
建議啟用每週執行一次的 TRIM cron 作業。當呼叫 fstrim 命令時,文件系統會將 TRIM 資訊發送到驅動器以丟棄已刪除的數據(我希望我做對了)
到目前為止這麼好,這個描述很多地方。
但是我找不到任何關於這些 TRIM 資訊如何/在哪裡“儲存”在 fstrim 命令之間的文件系統中的任何資訊?
並且可以以某種方式“清除”這些 TRIM 資訊,以便 SSD 不會獲得所有必須丟棄的頁面/塊的資訊嗎?
或者 fstrim 命令會比較文件系統和 SSD 的實際刪除數據嗎?
我不知道 ext4 是否真的將它儲存在任何地方。其他文件系統當然不會。
ext4 僅在目前會話中避免它已經修剪的內容 - 當它仍然安裝時。一旦您重新啟動或重新掛載文件系統,它就會再次修剪空白空間。
所以這可能是一個根本不儲存的記憶體結構。我沒有深入研究非常精細的原始碼來找出答案。
一個小測試:
# truncate -s 1G /dev/shm/foobar.img # losetup --find --show /dev/shm/foobar.img /dev/loop9 # mkfs.ext4 /dev/loop9 # mkdir /mnt/loop
給定一個 1G 的文件系統,讓我們掛載和修剪它:
# mount /dev/loop9 /mnt/loop/ # fstrim -v /mnt/loop /mnt/loop: 973.4 MiB (1020678144 bytes) trimmed # fstrim -v /mnt/loop /mnt/loop: 0 B (0 bytes) trimmed
所以它首先修剪所有……畢竟,這已經很可疑了:mkfs 也已經修剪過(哎喲),所以它應該知道它仍然是空的和修剪過的,對吧?好吧,如果它知道,它不在乎:
# umount /mnt/loop # mount /dev/loop9 /mnt/loop # fstrim -v /mnt/loop /mnt/loop: 973.4 MiB (1020678144 bytes) trimmed
因此,重新安裝後,它只會再次修剪所有可用空間。
創建和刪除文件時,也不是精確的:
# dd bs=1M count=10 if=/dev/zero of=/mnt/loop/zerofile 10+0 records in 10+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0124641 s, 841 MB/s # sync # rm /mnt/loop/zerofile # fstrim -v /mnt/loop /mnt/loop: 117.5 MiB (123203584 bytes) trimmed
因此,寫入 10M 會導致重新修剪 117M。它只是沒有任何意義。
只有 SSD 本身真正知道目前修剪了什麼,什麼沒有,當被要求修剪已經修剪的區域時,它應該什麼都不做。所以沒有傷害,也不需要真正將這些資訊儲存在文件系統中。