![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnaukWOp5ma5pmYwcnbwEnbil3N1MDMzIzLcVTMvwFMxUTMwIzLc1WdixWYvwFduVWboNWY0RXYvwVY0FGZvwVZt5CevJWcu42Y4VnbpxWLuR2Lc9CX6MHc0RHaiojIsJye.jpg)
<a target="_blank"></a>
在 linux 中挂載 ssd 上的 btrfs,可以采用各種參數進行優化:
<code># <file system> <mount point> <type> <options> <dump> <pass></code>
<code>uuid=<略> / btrfs defaults,ssd,discard,noatime,compress=lzo,subvol=@ 0 1</code>
這些參數各有優缺點,酌情添加。
btrfs 檔案系統有對 ssd 進行優化,在挂載參數中加入 <code>ssd</code> 即可。該參數不會自動啟用 trim/discard。
可以通過以下指令确認 ssd 是否支援 trim:
<code>sudo hdparm -i /dev/sdx | grep trim</code>
<code>* data set management trim supported (limit 8 blocks)</code>
<code>/* devices that don't properly handle queued trim commands */</code>
<code>{ "micron_m500_*", null, ata_horkage_no_ncq_trim |</code>
<code>ata_horkage_zero_after_trim, },</code>
<code>{ "crucial_ct*m500*", null, ata_horkage_no_ncq_trim |</code>
<code>{ "micron_m5[15]0_*"," mu01", ata_horkage_no_ncq_trim |</code>
<code>{ "crucial_ct*m550*", "mu01", ata_horkage_no_ncq_trim |</code>
<code>{ "crucial_ct*mx100*", "mu01", ata_horkage_no_ncq_trim |</code>
<code>{ "samsung ssd 8*", null, ata_horkage_no_ncq_trim |</code>
<code>{ "fcct*m500*", null, ata_horkage_no_ncq_trim |</code>
<code></code>
<code>/* devices that don't properly handle trim commands */</code>
<code>{ "supersspeed s238*", null, ata_horkage_notrim, },</code>
該參數不是必需的,也可以自定義周期性運作 <code>fstrim</code> 指令來取代該參數,使用該指令前要确認 ssd 支援 trim,否則可能造成資料丢失。當 ssd 有足夠的空餘空間或(未配置設定的)可用空間時不需要該參數。
挂載參數可以加入 <code>noatime</code>,通過禁止更新通路記錄來減少不必要的寫操作以提高性能。該選項對 hdd 同樣有性能提升。btrfs 的預設配置為 <code>relatime</code>。
打開壓縮功能在通常情況下有利于提高傳輸性能(并非絕對),也可以節省存儲空間。加入以下挂載參數:
<code>compress=lzo</code>
<code>或</code>
<code>compress=zlib</code>
lzo 速度更快,zlib 壓縮率更高。注意确認 ssd 主要是否是非壓縮主要,若為壓縮主要不建議加入該參數。
若 ssd 帶有緩存,啟用 write cache 可以提高性能:disks -> drive setting -> enable write cache,但在突然斷電的情況下可能造成資料丢失。
ssd 結構不同于傳統硬碟,尋址時間短,i/o 排程算法可選擇 <code>noop</code> 以降低延遲。以下指令可檢視與修改排程器:
<code>cat /sys/block/sdx/queue/scheduler # sdx 指你的裝置</code>
<code>sudo tee /sys/block/sdx/queue/scheduler <<< noop</code>
注意以上方法并不持久,重新開機後會重置。如果 ssd 是系統唯一的儲存設備,可考慮通過 <code>elevator=noop</code> 核心參數設定 i/o 排程器。也可使用 udev 規則來修改排程器,對多儲存設備同樣有效:
<code>/etc/udev/rules.d/60-ssd-scheduler.rules # 建立該檔案</code>
檔案内容如下:
<a href="http://www.akarin.cn/archives-73.html" target="_blank">關于在ssd上使用btrfs檔案系統需要做的優化 - akarin.cn</a>
<a href="https://wiki.archlinux.org/index.php/solid_state_drives_(%e7%ae%80%e4%bd%93%e4%b8%ad%e6%96%87)" target="_blank">solid state drives - arch wiki</a>
<a href="https://wiki.debian.org/ssdoptimization" target="_blank">ssd optimization - debian wiki</a>
<a href="https://btrfs.wiki.kernel.org/index.php/faq" target="_blank">btrfs wiki</a>
本文來自雲栖社群合作夥伴“linux中國”,原文釋出日期:2015-10-16