Mount

TRIM 是否需要“丟棄”安裝?

  • June 8, 2021

我想知道將ATA TRIM 發送到 SSD 的控制器是否真的需要使用該discard選項(記錄在 中)安裝 SSD。man mount

證據有點間接:無論我是否discardSanDisk 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"

引用自:https://unix.stackexchange.com/questions/649964