TRIM 是否需要“丟棄”安裝?
我想知道將ATA TRIM 發送到 SSD 的控制器是否真的需要使用該
discard
選項(記錄在 中)安裝 SSD。man mount
證據有點間接:無論我是否
discard
在SanDisk SSD PLUS上安裝分區,刪除後的文件都無法通過執行 TestDisk 來恢復。文件路徑完好無損,但文件內容不見了。由此我懷疑TRIM在SSD上執行並使文件內容無法恢復。看著
systemctl list-timers
,似乎沒有一個單元在執行fstrim
。儘管分區未掛載,但核心是否在文件刪除後發送 TRIM
discard
?還是 TestDisk 無法可靠地從 SSD 恢復文件的另一個原因?我在 Arch Linux 5.12.3 上。
findmnt
告訴我有關分區及其安裝選項的資訊:TARGET SOURCE FSTYPE OPTIONS / /dev/sda3 ext4 rw,relatime └─/sda1 /dev/sda1 ext4 rw,relatime,lazytime,discard
如果文件系統使用 掛載
discard
,則刪除文件將自動導致發出 TRIM 命令。這通常會對性能產生負面影響,因此通常最好不要使用該掛載選項,而是fstrim
定期執行,只要所有塊設備層都支持它就可以工作(例如,如果您使用 LUKS 進行加密,你需要使用cryptsetup --allow-discards
)。除非您使用此掛載選項,否則當您取消連結文件時,文件系統驅動程序不會自動發送 TRIM 命令。您也可以嘗試使用
nodiscard
. 儘管這是預設設置且通常是不必要的,但您的文件系統可能已將持續的 TRIM 支持添加到通過tune2fs -o discard /dev/sda1
. 您可以使用 刪除它tune2fs -o ^discard /dev/sda1
。
debugfs
您可以通過使用該實用程序在刪除文件之前首先列出文件中的實際塊,然後在刪除後直接訪問這些塊以查看它們是否已歸零或返回未受干擾但未分配的數據,從而找出問題所在.這是一個 shell 腳本,用於測試是否
debugfs
可以使用塊號讀取已刪除文件的內容:#!/bin/sh file=test_file echo "Current date: $(date)" > "$file"; sync # Get the device of our test file, for example "/dev/sda1" device=$(df -P "$file" | awk 'END{print $1}') # The block of the file's contents, stat gets the inode number block=$(sudo debugfs -R "blocks <$(stat -c %i "$file")>" "$device") rm $file; sync # Read the contents of the deleted file, -D bypasses the buffer cache sudo debugfs -D -R "block_dump $block" "$device"