Io
fstrim 和 iostat
我的新筆記本中有一個新的三星固態硬碟。我調整了所有內容以避免寫入磁碟(firefox 配置文件和
/var/log
記憶體),我使用的是ext4
fs,relatime
並且我fstrim
每天使用一次來修剪我的 ssd。我用 . 監視磁碟負載
iostat -dhm
。在執行顯示fstrim
的命令之前iostat
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 4.97 0.05 0.59 1856 20924
修剪後
/home
# fstrim -v /home /home: 100.2 GiB (107555401728 bytes) trimmed
ìostat
節目Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn sda 5.91 0.05 3.51 1859 123498
MB_wrtn
增加102574 MB
。這是否意味著fstrim
正在寫入102574 MB = 100.2 GB
我的磁碟?修剪應該“標記”不包含有效數據的頁面,而不是寫入它們。
我猜想
iostat
將 by 的操作fstrim
視為寫作(即使它不是寫作)。你怎麼看?有沒有更好的方法來監控我的磁碟?注意:使用
iotop
不是答案,因為它不顯示被殺死的程序的數據量。因此,iotop
測量是不精確的。
MB_wrtn 增加了 102574 MB。這是否意味著 fstrim 正在將 102574 MB = 100.2 GB 寫入我的磁碟?
是的,就是這個意思。
fstrim
本質上查看塊設備的每個塊並確定文件系統是否正在使用該塊(即包含重要數據):
- 塊正在使用中:忽略它。
- 塊未使用:向底層塊設備發送此塊的 ATA TRIM 命令。
完成後,修剪塊的數量應始終等於文件系統上的可用空間。
fstrim
每次執行時都會修剪每個空閒塊,無論它過去是否已經被修剪過,所以如果你更頻繁地執行它,它不會變得更快。核心可能將 TRIM 命令視為寫入命令,因此每個執行的 TRIM 命令都算作 4k 寫入命令。
修剪應該“標記”不包含有效數據的頁面,而不是寫入它們。
將塊“標記”為修剪等同於“寫入”它們,因為它們的內容會發生變化。如果您不小心修剪了錯誤的塊,您將失去數據 - 就像將零寫入錯誤的塊會導致您失去數據一樣。