首頁 > 軟體

在 SSD 上使用 Btrfs 檔案系統的相關優化

2020-06-16 17:51:22

優化掛載引數

在 Linux 中掛載 SSD 上的 btrfs,可以採用各種引數進行優化:

  1. #<file system><mount point><type><options><dump><pass>
  2. UUID=<略>/ btrfs defaults,ssd,discard,noatime,compress=lzo,subvol=@01

這些引數各有優缺點,酌情新增。

ssd

btrfs 檔案系統有對 SSD 進行優化,在掛載引數中加入 ssd 即可。該引數不會自動啟用 TRIM/discard。

discard

可以通過以下命令確認 SSD 是否支援 TRIM

  1. sudohdparm-I /dev/sdX |grep TRIM
  2. *DataSetManagement TRIM supported (limit 8 blocks)

若 SSD 支援 TRIM 命令,可以在 /etc/fstab 中啟用 discard 引數。建議將 discard 掛載引數作為首選。據 debian wiki 所述,包括三星,鎂光,英睿達在內的一些 SSD 在 discard/TRIM 上有問題,不能合適地處理 TRIM 命令。以下是 linux 核心相關處原始碼 (2015/10/15):

  1. /* devices that don't properly handle queued TRIM commands */
  2. {"Micron_M500_*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
  3. ATA_HORKAGE_ZERO_AFTER_TRIM,},
  4. {"Crucial_CT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
  5. ATA_HORKAGE_ZERO_AFTER_TRIM,},
  6. {"Micron_M5[15]0_*"," MU01", ATA_HORKAGE_NO_NCQ_TRIM |
  7. ATA_HORKAGE_ZERO_AFTER_TRIM,},
  8. {"Crucial_CT*M550*","MU01", ATA_HORKAGE_NO_NCQ_TRIM |
  9. ATA_HORKAGE_ZERO_AFTER_TRIM,},
  10. {"Crucial_CT*MX100*","MU01", ATA_HORKAGE_NO_NCQ_TRIM |
  11. ATA_HORKAGE_ZERO_AFTER_TRIM,},
  12. {"Samsung SSD 8*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
  13. ATA_HORKAGE_ZERO_AFTER_TRIM,},
  14. {"FCCT*M500*", NULL, ATA_HORKAGE_NO_NCQ_TRIM |
  15. ATA_HORKAGE_ZERO_AFTER_TRIM,},
  16. /* devices that don't properly handle TRIM commands */
  17. {"SuperSSpeed S238*", NULL, ATA_HORKAGE_NOTRIM,},

該引數不是必需的,也可以自定義周期性執行 fstrim 命令來取代該引數,使用該命令前要確認 SSD 支援 TRIM,否則可能造成資料丟失。當 SSD 有足夠的空餘空間或(未分配的)可用空間時不需要該引數。

noatime

掛載引數可以加入 noatime,通過禁止更新存取記錄來減少不必要的寫操作以提高效能。該選項對 HDD 同樣有效能提升。btrfs 的預設設定為 relatime

compress

開啟壓縮功能在通常情況下有利於提高傳輸效能(並非絕對),也可以節省儲存空間。加入以下掛載引數:

  1. compress=lzo
  2. compress=zlib

lzo 速度更快,zlib 壓縮率更高。注意確認 SSD 主控是否是非壓縮主控,若為壓縮主控不建議加入該引數。

寫快取

若 SSD 帶有快取,啟用 Write Cache 可以提高效能:Disks -> Drive Setting -> Enable Write Cache,但在突然斷電的情況下可能造成資料丟失。

I/O 排程

SSD 結構不同於傳統硬碟,定址時間短,I/O 排程演算法可選擇 noop 以降低延遲。以下命令可檢視與修改排程器:

  1. cat/sys/block/sdX/queue/scheduler # sdX 指你的裝置
  2. sudotee/sys/block/sdX/queue/scheduler <<< noop

注意以上方法並不持久,重新啟動後會重置。如果 SSD 是系統唯一的儲存裝置,可考慮通過 elevator=noop 核心引數設定 I/O 排程器。也可使用 udev 規則來修改排程器,對多儲存裝置同樣有效:

  1. /etc/udev/rules.d/60-ssd-scheduler.rules #建立該檔案

檔案內容如下:

# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"

怎麼把Fedora 21 Workstation Cinnamon 的桌面環境安裝到 Btrfs 檔案系統的計算機上  http://www.linuxidc.com/Linux/2014-12/110844.htm

Linux檔案系統Btrfs的Makefile分析 http://www.linuxidc.com/Linux/2012-10/73301.htm

Linux 檔案系統Btrfs 的Kconfig分析 http://www.linuxidc.com/Linux/2012-10/73300.htm

Btrfs檔案系統在CentOS中的應用 http://www.linuxidc.com/Linux/2012-08/68098.htm


IT145.com E-mail:sddin#qq.com