如何在Linux下使用fstrim延長SSD驅(qū)動(dòng)器的壽命
這個(gè)新的系統(tǒng)服務(wù)可以使你的生活更輕松。
在過去的十年中,固態(tài)驅(qū)動(dòng)器(SSD)帶來了一種管理存儲(chǔ)的新方法。與上一代的轉(zhuǎn)盤產(chǎn)品相比,SSD 具有無聲、更冷卻的操作和更快的接口規(guī)格等優(yōu)點(diǎn)。當(dāng)然,新技術(shù)帶來了新的維護(hù)和管理方法。SSD 具有一種稱為 TRIM 的功能。從本質(zhì)上講,這是一種用于回收設(shè)備上未使用的塊的方法,該塊可能先前已被寫入,但不再包含有效數(shù)據(jù),因此可以返回到通用存儲(chǔ)池以供重用。Opensource.com 的 Don Watkins 首先在其 2017 年的文章《Linux 固態(tài)驅(qū)動(dòng)器:為 SSD 啟用 TRIM》中介紹過 TRIM 的內(nèi)容。
如果你一直在 Linux 系統(tǒng)上使用此功能,則你可能熟悉下面描述的兩種方法。
老的方式
丟棄選項(xiàng)
我最初使用 mount
命令的 discard
選項(xiàng)啟用了此功能。每個(gè)文件系統(tǒng)的配置都放在 /etc/fstab
文件中。
# cat /etc/fstab
UUID=3453g54-6628-2346-8123435f /home xfs defaults,discard 0 0
丟棄選項(xiàng)可啟用自動(dòng)的在線 TRIM。由于可能會(huì)對性能造成負(fù)面影響,最近關(guān)于這是否是最佳方法一直存在爭議。使用此選項(xiàng)會(huì)在每次將新數(shù)據(jù)寫入驅(qū)動(dòng)器時(shí)啟動(dòng) TRIM。這可能會(huì)引入其他磁盤活動(dòng),從而影響存儲(chǔ)性能。
Cron 作業(yè)
我從 fstab
文件中刪除了丟棄選項(xiàng)。然后,我創(chuàng)建了一個(gè) cron 作業(yè)來按計(jì)劃調(diào)用該命令。
# crontab -l
@midnight /usr/bin/trim
這是我最近在 Ubuntu Linux 系統(tǒng)上使用的方法,直到我了解到另一種方法。
一個(gè)新的 TRIM 服務(wù)
我最近發(fā)現(xiàn)有一個(gè)用于 TRIM 的 systemd 服務(wù)。Fedora 在版本 30 中將其引入,盡管默認(rèn)情況下在版本 30 和 31 中未啟用它,但計(jì)劃在版本 32 中使用它。如果你使用的是 Fedora 工作站 31,并且你想要開始使用此功能,可以非常輕松地啟用它。我還將在下面向你展示如何對其進(jìn)行測試。該服務(wù)并非 Fedora 獨(dú)有的服務(wù)。它是否存在及其地位將因發(fā)行版而異。
測試
我喜歡先進(jìn)行測試,以更好地了解幕后情況。我通過打開終端并發(fā)出配置服務(wù)調(diào)用的命令來執(zhí)行此操作。
/usr/sbin/fstrim --fstab --verbose --quiet
fstrim
的 -help
參數(shù)將描述這些信息和其他參數(shù)。
$ sudo /usr/sbin/fstrim --help
Usage:
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
因此,現(xiàn)在我可以看到這個(gè) systemd 服務(wù)已配置為在我的 /etc/fstab
文件中的所有受支持的掛載文件系統(tǒng)上運(yùn)行該修剪操作(-fstab
),并打印出所丟棄的字節(jié)數(shù)(-verbose
),但是抑制了任何可能會(huì)發(fā)生的錯(cuò)誤消息(–quiet
)。了解這些選項(xiàng)對測試很有幫助。例如,我可以從最安全的方法開始,即空運(yùn)行。我還將去掉 -quiet
參數(shù),以便確定驅(qū)動(dòng)器設(shè)置是否發(fā)生任何錯(cuò)誤。
$ sudo /usr/sbin/fstrim --fstab --verbose --dry-run
這就會(huì)顯示 fstrim
命令根據(jù)在 /etc/fstab
文件中找到的文件系統(tǒng)要執(zhí)行的操作。
$ sudo /usr/sbin/fstrim --fstab --verbose
現(xiàn)在,這會(huì)將 TRIM 操作發(fā)送到驅(qū)動(dòng)器,并報(bào)告每個(gè)文件系統(tǒng)中丟棄的字節(jié)數(shù)。以下是我最近在新的 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 實(shí)現(xiàn)了一個(gè)計(jì)劃每周運(yùn)行它的 systemd 計(jì)時(shí)器服務(wù)。要檢查其是否存在及當(dāng)前狀態(tài),請運(yùn)行 systemctl status
。
$ sudo systemctl status fstrim.timer
現(xiàn)在,啟用該服務(wù)。
$ sudo systemctl enable fstrim.timer
驗(yàn)證
然后,你可以通過列出所有計(jì)時(shí)器來驗(yàn)證該計(jì)時(shí)器是否已啟用。
$ sudo systemctl list-timers --all
會(huì)顯示出下列行,表明 fstrim.timer
存在。注意,該計(jì)時(shí)器實(shí)際上激活了 fstrim.service
服務(wù)。這是實(shí)際調(diào)用 fstrim
的地方。與時(shí)間相關(guān)的字段顯示為 n/a
,因?yàn)樵摲?wù)已啟用且尚未運(yùn)行。
NEXT LEFT LAST PASSED UNIT ACTIVATES
n/a n/a n/a n/a fstrim.timer fstrim.service
結(jié)論
該服務(wù)似乎是在驅(qū)動(dòng)器上運(yùn)行 TRIM 的最佳方法。這比必須創(chuàng)建自己的 crontab 條目來調(diào)用 fstrim
命令要簡單得多。不必編輯 fstab
文件也更安全。觀察固態(tài)存儲(chǔ)技術(shù)的發(fā)展很有趣,并且我很高興看到 Linux 似乎正在朝著標(biāo)準(zhǔn)且安全的方向?qū)崿F(xiàn)它。
在本文中,學(xué)習(xí)了固態(tài)驅(qū)動(dòng)器與傳統(tǒng)硬盤驅(qū)動(dòng)器有何不同以及它的含義…