2014年12月19日 星期五

實用 SSD 總整理(三)

使用一段時間之後若 SSD 發生掉速的情形該如何是好呢?一般來說可以先找找看原廠是否有提供抹除工具或是韌體更新工具,除此之外只要 SSD 有支援 security set 指令也可以透過 security erase 回覆到原本的效能水準,既然是 security erase 當然也會清空內部所有資料,因此操作前務必先備份。

可以透過 hdparm -I /dev/sdx 檢查是否有支援,如果 security 部份顯示如下圖為 "supported" 則表示有支援,若是 "not supported" 則表示不支援。



*** 以下為危險操作,操作不當將導致資料損毀 *** 
*** 請確保在腦袋清醒的狀態下執行下列操作! ***

首先我們先說明整個流程:
1. 備份整個 SSD 資料 (這裡沒有備份教學,在此假設大家已有現成的備份還原機制)
2. 對 SSD 進行 security erase
3. 還原資料至 SSD

2014年12月14日 星期日

實用 SSD 總整理(二)

我的 SSD 支援哪些標準,哪些功能?我該如何檢視 SSD 健康狀態?實際上這兩項問題都是硬碟出現時就已經存在的老問題,因此以下介紹的工具皆適用於 SSD 以及傳統硬碟。

透過 hdparm 我們可以檢視 SSD 諸多資訊,包含型號、韌體版本、支援協定、容量大小、支援模式、支援的 SATA 指令以及Security狀態等等,假設我們想查看 /dev/sdb 這顆 SSD 資訊即可透過 hdparm 進行檢視:
hdparm -I /dev/sdb


無論是使用硬碟或是 SSD 最擔心的就是發生資料損毀的狀況,畢竟資料無價啊!因此監控儲存裝置的健康狀態成為了重要的問題,這裡有一項好消息以及一項壞消息。好消息是這個問題硬碟大廠們老早就制定 S.M.A.R.T 指令來監控與回報硬碟的健康狀態,因此同樣也有既有的工具可以讀取 SMART 資訊,然而壞消息是 SSD 與硬碟設計上的差異導致 SMART 欄位定義不盡相同,一般 SMART 工具儘管能讀出 SMART 值卻不一定能正確解析內容。這部份原則上只能仰賴各家 SSD 廠商提供監控工具或是提供 datasheet 描述各欄位資訊,一般的 SMART 工具不見得能正確解析每顆 SSD 的SMART 資訊。

以下示範 gnome-disk-utility 取得 SMART 資訊:


實用 SSD 總整理(一)

隨著 SSD 日漸普及許多應用上逐漸替換掉原先硬碟,然而 SSD 諸多特性上與硬存在差異,此外不同的 SSD 控制晶片之間亦存在差異性。因此在系統設定以及管理上當然會與硬碟有所不同,以下為筆者整理 Linux 系統下使用 SSD 的經驗加上從各方蒐集的資料,將常用的 SSD 設定與遇到的問題做整理。

相信許多人都有對於 SSD 都有以下問題:
1. 什麼是 Trim,如何設定 Trim?
2. 我的 SSD 支援哪些功能?
3. 該如何檢視 SSD 的健康狀態?
4. 我的 SSD 速度不如以往,該怎辦?
5. 什麼是 4K 對齊,如何確認 4K 對齊呢?

首先我們先比較 SSD 與硬碟特性上的差異:

SSDHDD
效能
功耗
耐振動特性耐振動不耐振動
單位容量成本
資料儲存方式NAND Flash磁盤/讀寫頭
抹寫次數限制

從以上比較表中可以理解 SSD 是個快、省電、不怕振動的資料儲存方案,這些特性剛好符合行動應用的需求也因此 SSD 在行動裝置上有迅速的成長。然而 SSD 同樣存在一些缺陷,例如抹除寫入次數受限於 NAND Flash 顆粒(怕寫),因此我們可以透過微調系統設使 SSD 能發揮長處與避免缺點,讓我們開始吧!

修改 mount 設定開啟 Trim 以及 noatime。Trim 指令是針對 SSD 新增的指令,以往磁盤式的儲存設備對資料的操作僅有寫入與讀取,然而 NAND Flash 除了寫入、讀取之外還需要抹除的操作,假設需對一個已經存放舊資料的 Flash 區塊寫入新資料,並不能直接將資料寫入該區塊,而是需先將該區塊抹除才能在寫入資料:以往作業系統刪除檔案時,只會覆寫檔案的連結/配置資訊抹除檔案的完整資訊(刪除才會快),因次新增 Trim 指令使系統可在空閒時透過 Trim 指令告知 SSD 哪些資料不須再使用,因此 SSD 可將對應的 Flash 區塊進行抹除,一般而言 Trim 對於 SSD 長時間使用下的效能表現以及壽命有正面幫助,mount 對應的參數設定為 discard。由於 SSD 對於寫入次數有所限制,一般 Linux 系統掛載設定預設開啟 access time,當系統開啟檔案時就會更新(寫入)該檔案的 access time 資訊,如果應用上不需要紀錄 access time 即可關閉 atime 設定以減少寫入的資料,說了那多該如何修改 mount 參數套用以上設定呢?

編輯 /etc/fstab:
# 原始設定:
# <file system>    <mount point> <type>   <options>                    <dump>    <pass>
UUID=XXXX       /                        ext4       errors=remount-ro       0              1

# 加入 Trim  與關閉 access time 設定:
# <file system>    <mount point> <type>   <options>                                             <dump>    <pass>
UUID=XXXX       /                        ext4       errors=remount-ro,noatime,discard      0              1


修改完 /etc/fstab 之後重新開機即可生效。

此外還可以透過 fstrim 指令對特定檔案系統執行 Trim 指令,例如我們可以對根目錄未使用位址進行 Trim 操作:
fstrim -v /