From: http://yblog.org/archive/index.php/11734
SSD和一般傳統硬碟最大的不同,就是它的寫入壽命比較有限,同一塊資料區裡面的快閃記憶體(flash memory)經不起大量多次的寫入,故SSD採用控制晶片內建的特殊演算法,把資料平均寫入到不同區塊的快閃記憶體晶片上。
本文範例為Ubuntu Linux,我的Acer 3750G筆電裝的是Ubuntu 11.04,SATAII SSD 120GB(SandForce SF-1222控制晶片),開機過UEFI後大約8秒進入自動桌面。
1、使用適當的磁區分割程式
在Linux平台上使用SSD,最重要的一件事情就是「分割硬碟磁區」中的「對齊」問題,這是因為過去傳統硬碟有磁柱、磁扇這些設定(CHS地址地址),而SSD則沒有,故設定磁區大小的時候,如果沒有對齊磁區(Partition Alignment),會有浪費和效能的問題,這在新的硬碟分割程式中都已經有對應的方式。
以圖形化的磁區分割工具來看,大家最常用的gparted新版本(我手邊的是0.7.0),擁有自動對齊磁區的功能,安裝Ubuntu或其他Linux發行版到SSD上時,可以進入桌面,在安裝程式啟動前,使用live-cd或live-usb內建的磁區管理程式gparted(要安裝)進行分割。
舊式的桌機主機板、筆電主機板使用的還是BIOS系統,格式化這個SSD的分割表時,最初要選擇MBR(Master Boot Record)分割表的形式。如果你的桌機、筆電是較新的款式,開機用的韌體已經改成新技術且更快的UEFI,那麼初始格式化分割表建議是要選擇「GUID分割表」形式(Mac OS現在都用這個新的分割表形式),也就是選gpt這種分割形式(建議),當然你要沿用MBR、msdos的型態也可以。
接著格式化磁區就依照你原本在圖形化介面的習慣即(前面提到的gparted)可,純文字介面的話要用GPT fdisk,才能幫你自動對齊,用fdisk的話,過去你得自己計算磁區對齊的問題,現在新版的fdisk可以下fdisk -cu (device)這樣的方式來解決。gparted圖形化界面操作分割磁區,自動對齊的選項在左下角,貼齊右邊的項目要選「MiB」,不要選「磁柱」。
以120GB的SSD而言,我的分割習慣是,/boot給256MB,/給20GB,盛下的都給/home,然後常讀寫的/tmp,放到tmpfs裡面去,用系統DRAM記憶體來負責,減少對SSD的損害。
這樣透過USB隨身碟安裝Ubuntu或其他Linux Distro時,你會發現複製檔案寫入的時間縮短許多,如果不想等網路更新檔案,可以選擇跳過網路下載檔案的部份,只消幾分鐘Ubuntu就自己安裝好了。重開機連上網之後,再來進行套件的自動更新或語言包的完整安裝。
2、設定正確掛載選項,啟用TRIM
安裝好Linux之後,接下來這個非常重要。
SSD要保持長期穩定和速度,就需要啟用TRIM的支援,這是讓SSD在非尖峰讀寫時間才去真正抹除快閃記憶體晶片上被標記抹除的資料。本例是以ext4檔案系統為主,以ext4而言,刪除檔案後,系統cycle有跑到sync指令時才真正抹除資料。要開啟TRIM支援,就得編輯fstab,讓指定的磁區掛載選項加上discard這個flag即可。
要在終端機視窗下的指令
fstab先備份 sudo cp /etc/fstab /etc/fstab_bak-notrim
fstab編輯 sudo gedit /etc/fstab
在編輯文件視窗中,把你要加上TRIM的磁區,比方說這樣的一行「UUID=[一長串英文與數字] / ext4 errors=remount-ro 0 1」
在errors之前加上discard,
或defaults之後加上,
接著再儲存檔案,重開機後就有支援TRIM了。
我自己則是還會加上noatime,nodiratime,discard,
noatime與noairatime是不存取檔案或資料夾的access屬性,也就形同減少對磁區的讀寫次數。
比方說我的/home磁區,設定就會變成
# /home was on /dev/sda3 during installation
UUID=2d86c8c2-2db5-4f10-a5e8-b91d04a06518 /home ext4 noatime,nodiratime,discard,defaults 0 2
或者類似成這樣 ext4 noatime,nodiratime,discard,errors=remount-ro 0 1
都改好之後,請儲存這份文件。
3、將 /tmp 以 tmpfs 形式掛上
同樣sudo gedit /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
重啟或不重啟,用sudo mount -oremount / 也可以
如果你的筆電或桌機使用SSD,而不是伺服器的話,還可以加上
tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0
這是讓log檔案也丟到記憶體去,就減少對SSD的存取,提昇效能與SSD使用壽命。
之後,你可以在Firefox裡面透過about:config設定,把快取都丟到/tmp去,提高Firefox效率外,也可以減少對SSD的讀取。
新增browser.cache.disk.parent_directory.
設定數值到/tmp
要檢視的話,瀏覽列輸入 about:cache
4、測試SSD速度
我這邊只提供一個最簡單的方法,你除了用磁碟公用程式去測試外,最好是開終端機視窗(terminal)。
下指令
hdparm -Tt /dev/sdX 這個X是a或b,看你的SSD是第一顆或第二顆硬碟。我的是sda,因為是第一顆硬碟。
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讀取效率數值。
比說我的就是這樣的結果:
/dev/sda:
Timing cached reads: 9760 MB in 2.00 seconds = 4883.67 MB/sec
Timing buffered disk reads: 774 MB in 3.00 seconds = 257.57 MB/sec
小結
大致上,這樣SSD會在你的Ubuntu或其他Linux發行版上運作得很好了。如果要改I/O Scheduler提供系統效率的,可以改成 noop 或 deadline,理論上使用SSD,用後者長期會比較快。
要修改這個得動到/etc/default/grub設定。
延伸閱讀
HOWTO: Configure Ext4 to Enable TRIM Support for SSDs on Ubuntu and Other Distributions
HOWTO: Check If TRIM On Ext4 Is Enabled And Working On Ubuntu And Other Distributions