SSD 和一般傳統硬碟的運作不太一樣,Flash memory 經不起大量多次的寫入,所以此篇做些設定部份的改善。
Linux 使用 SSD 的最佳化分割、設定方式
下述整理自此篇:Linux平台使用SSD必讀 (範例為Ubuntu)
使用適當的磁區分割程式 (避免空間浪費)
分割程式 (自動補齊磁區功能: 貼齊:MiB)
安裝Ubuntu或其他Linux發行版到SSD上時,可以進入桌面,在安裝程式啟動前,使用live-cd或live-usb內建的磁區管理程式gparted(要安裝)進行分割
- gparted (圖形化介面) 擁有自動對齊磁區的功能,能避免浪費和效能問題。
- (gparted圖形化界面操作分割磁區,自動對齊的選項在左下角,貼齊右邊的項目要選「MiB」,不要選「磁柱」。)
- GPT fdisk(純文字介面的話要用GPT fdisk):才能幫你自動對齊
(用fdisk的話,過去你得自己計算磁區對齊的問題,現在新版的fdisk可以下fdisk -cu (device)這樣的方式來解決)。- 小洲大大說明:新的版 fdisk 不需要用 fdisk -cu 了,預設都是非 dos 相容模式,也使用 sector 而不是 cylinder 定址劃分磁區
BIOS / UEFI
- BIOS(舊式的桌機、筆電使用的BIOS系統):格式化這個SSD的分割表時,最初要選擇MBR(Master Boot Record)分割表的形式
- UEFI(桌機、筆電開機用的韌體改成更快的UEFI):初始格式化分割表建議要選擇「GUID分割表」形式(Mac OS現在都用這個新的分割表形式),也就是選gpt這種分割形式(建議)
設定正確掛載選項,啟用TRIM (非尖峰時間才真正抹除資料)
SSD要保持長期穩定和速度,就需要啟用TRIM的支援,這是讓SSD在非尖峰讀寫時間才去真正抹除快閃記憶體晶片上被標記抹除的資料。本例是以ext4檔案系統為主,以ext4而言,刪除檔案後,系統cycle有跑到sync指令時才真正抹除資料。要開啟TRIM支援,就得編輯fstab,讓指定的磁區掛載選項加上discard這個flag即可。
註:此文下面有留言建議,使用 btrfs 的話,加入 noatime 即可,不需要 discard
啟用 TRIM 步驟
- sudo cp /etc/fstab /etc/fstab_bak-notrim # 備份 fstab
- sudo vim /etc/fstab # 找到 SSD 的 ext4 磁區,在 errors 之前加上discard,或 defaults 之後加上 discard
- 範例:
- UUID=d4ef277a-8e95-4aba-8783-1c7c397a69c4 / ext4 errors=remount-ro 0 1
- 改成:
- UUID=d4ef277a-8e95-4aba-8783-1c7c397a69c4 / ext4 discard,errors=remount-ro 0 1
- 此篇教學建議再加上 noatime 和 nodiratime 如下:
- UUID=d4ef277a-8e95-4aba-8783-1c7c397a69c4 / ext4 noatime,nodiratime,discard,errors=remount-ro 0 1
- 註1:noatime 與 noairatime 是不存取檔案或資料夾的access屬性,也就形同減少對磁區的讀寫次數。
- 註2:sudo mount -o remount / # 重新 mount /
將 /tmp 以 tmpfs 形式掛上 (頻繁寫入的部分依靠 RAM)
- sudo vim /etc/fstab # 於檔案最後加入下述三行
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/spool tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0 - # 若是筆電,不是 server 的話,可以考慮多加上下面此行
tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0 - Firefox 透過 about:config 設定下述參數:
browser.cache.disk.parent_directory 設定到 /tmp 過去(檢視可用 about:cache)
測試SSD速度
- hdparm -Tt /dev/sdX
- Timing cached reads: x MB in y seconds = z MB/sec 這是快取的速度,與你的SSD支援SATAII或SATAIII、以及上面的DRAM快取有關,不重要。
- Timing buffered disk reads: x MB in y seconds = z MB/sec 這個才是真正的SSD讀取效率數值。
進階部分
更改 I/O Scheduler
- 改I/O Scheduler提供系統效率的,可以改成 noop 或 deadline,理論上使用SSD,用後者長期會比較快。
- vim /boot/grub/grub.cfg 的 kernel 部份後面加上 elevator=noop或者deadline
# 註:我找不到此設定,所以沒辦法測試
swap 設定
- 有啟用 swap space,降底 /proc/sys/vm/swappiness 的值來減少系統使用
- sudo vim /etc/sysctl.conf # 於最底下增加下述
vm.swappiness=0
noatime implies nodiratime
https://lwn.net/Articles/244941/
util-linux 也有提供 fstrime.timer 的systemd服務可以每週幫你作一次,不一定要使用discard隨時做
Ref. https://wiki.archlinux.org/index.php/Ext4
了解,感謝指點~~~