這個新的系統服務可以使你的生活更輕鬆。
在過去的十年中,固態驅動器(SSD)帶來了一種管理儲存的新方法。與上一代的轉盤產品相比,SSD 具有無聲、更冷卻的操作和更快的介面規格等優點。當然,新技術帶來了新的維護和管理方法。SSD 具有一種稱為 TRIM 的功能。從本質上講,這是一種用於回收裝置上未使用的塊的方法,該塊可能先前已被寫入,但不再包含有效資料,因此可以返回到通用儲存池以供重用。Opensource.com 的 Don Watkins 首先在其 2017 年的文章《》中介紹過 TRIM 的內容。
如果你一直在 Linux 系統上使用此功能,則你可能熟悉下面描述的兩種方法。
我最初使用 mount
命令的 discard
選項啟用了此功能。每個檔案系統的設定都放在 /etc/fstab
檔案中。
# cat /etc/fstabUUID=3453g54-6628-2346-8123435f /home xfs defaults,discard 0 0
丟棄選項可啟用自動的線上 TRIM。由於可能會對效能造成負面影響,最近關於這是否是最佳方法一直存在爭議。使用此選項會在每次將新資料寫入驅動器時啟動 TRIM。這可能會引入其他磁碟活動,從而影響儲存效能。
我從 fstab
檔案中刪除了丟棄選項。然後,我建立了一個 cron 作業來按計劃呼叫該命令。
# crontab -l@midnight /usr/bin/trim
這是我最近在 Ubuntu Linux 系統上使用的方法,直到我了解到另一種方法。
我最近發現有一個用於 TRIM 的 systemd 服務。Fedora 在版本 30 中將其引入,儘管預設情況下在版本 30 和 31 中未啟用它,但計劃在版本 32 中使用它。如果你使用的是 Fedora 工作站 31,並且你想要開始使用此功能,可以非常輕鬆地啟用它。我還將在下面向你展示如何對其進行測試。該服務並非 Fedora 獨有的服務。它是否存在及其地位將因發行版而異。
我喜歡先進行測試,以更好地了解幕後情況。我通過開啟終端並行出設定服務呼叫的命令來執行此操作。
/usr/sbin/fstrim --fstab --verbose --quiet
fstrim
的 -help
引數將描述這些資訊和其他引數。
$ sudo /usr/sbin/fstrim --helpUsage: fstrim [options] <mount point>Discard unused blocks on a mounted filesystem.Options: -a, --all trim all supported mounted filesystems -A, --fstab trim all supported mounted filesystems from /etc/fstab -o, --offset <num> the offset in bytes to start discarding from -l, --length <num> the number of bytes to discard -m, --minimum <num> the minimum extent length to discard -v, --verbose print number of discarded bytes --quiet suppress error messages -n, --dry-run does everything, but trim -h, --help display this help -V, --version display version
因此,現在我可以看到這個 systemd 服務已設定為在我的 /etc/fstab
檔案中的所有受支援的掛載檔案系統上執行該修剪操作(-fstab
),並列印出所丟棄的位元組數(-verbose
),但是抑制了任何可能會發生的錯誤訊息(–quiet
)。了解這些選項對測試很有幫助。例如,我可以從最安全的方法開始,即空執行。我還將去掉 -quiet
引數,以便確定驅動器設定是否發生任何錯誤。
$ sudo /usr/sbin/fstrim --fstab --verbose --dry-run
這就會顯示 fstrim
命令根據在 /etc/fstab
檔案中找到的檔案系統要執行的操作。
$ sudo /usr/sbin/fstrim --fstab --verbose
現在,這會將 TRIM 操作傳送到驅動器,並報告每個檔案系統中丟棄的位元組數。以下是我最近在新的 NVME SSD 上全新安裝 Fedora 之後的範例。
/home: 291.5 GiB (313011310592 bytes) trimmed on /dev/mapper/wkst-home/boot/efi: 579.2 MiB (607301632 bytes) trimmed on /dev/nvme0n1p1/boot: 787.5 MiB (825778176 bytes) trimmed on /dev/nvme0n1p2/: 60.7 GiB (65154805760 bytes) trimmed on /dev/mapper/wkst-root
Fedora Linux 實現了一個計劃每週執行它的 systemd 計時器服務。要檢查其是否存在及當前狀態,請執行 systemctl status
。
$ sudo systemctl status fstrim.timer
現在,啟用該服務。
$ sudo systemctl enable fstrim.timer
然後,你可以通過列出所有計時器來驗證該計時器是否已啟用。
$ sudo systemctl list-timers --all
會顯示出下列行,表明 fstrim.timer
存在。注意,該計時器實際上啟用了 fstrim.service
服務。這是實際呼叫 fstrim
的地方。與時間相關的欄位顯示為 n/a
,因為該服務已啟用且尚未執行。
NEXT LEFT LAST PASSED UNIT ACTIVATESn/a n/a n/a n/a fstrim.timer fstrim.service
該服務似乎是在驅動器上執行 TRIM 的最佳方法。這比必須建立自己的 crontab 條目來呼叫 fstrim
命令要簡單得多。不必編輯 fstab
檔案也更安全。觀察固態儲存技術的發展很有趣,並且我很高興看到 Linux 似乎正在朝著標準且安全的方向實現它。
在本文中,學習了固態驅動器與傳統硬碟機有何不同以及它的含義…