一年多前剛開始使用 SSD 固態硬碟時,就問過了幾位朋友關於 SSD 的使用經驗,大家認知落差頗大,有些人用的很開心、有些人在觀望、有些人則完全不敢嘗試,而我至今已經累積了近兩年的使用經驗,在實務上也真的遇到了一些問題,包括在個人電腦讓的使用心得以及在伺服器主機上的使用心得,寫這篇文章就是希望能給尚未使用與正在使用 SSD 的人有所借鏡,以免災難發生時驚慌失措。
個人電腦篇
在公司裡因為開發人員的硬體設備已經很不錯了,就差在 Disk I/O 拖慢整體速度,尤其是開啟檔案較多的專案時更為明顯,之前公司裡就有位開發人員的電腦編譯一個較大的專案需花上 5 分鐘的時間,自從換上 SSD 固態硬碟後縮減到剩下 2 分鐘而已,開發效率的確有顯著改善。
因此這一年多來,公司裡開始陸續採購 SSD 硬碟給開發人員使用,以減少開發時的等待時間,過程中也未發生過任何災難,不過上星期有位同事的 SSD 硬碟無預警掛掉,電腦突然抓不到硬碟,連進入 BIOS 都看不到有硬碟存在,將硬碟拆下並接上外接式硬碟盒裝到其他電腦也完全偵測不到有硬碟存在,只能說慘上加慘,完全沒有拯救的機會。
我同事每天都用筆記型電腦在工作,平常沒有備份的習慣,還好公司有要求每天要將修改好的原始碼上傳到 SVN 版本庫,所以重要的程式碼資料全部都還在,並沒有遺失太多資料,這是不幸中的大幸,但畢竟還是有些資料遺失,不免有些遺憾。
今天聯繫上我們購買這顆 SSD 硬碟的維修中心,對方直說 SSD 無法維修,總之保固有三年,拿去換新的就是了,沒有救資料的服務。我不信邪,直接打去 SSD 原廠在台灣的技術支援單位,並且找到技術人員問清楚狀況,這才讓我得知這些賣 SSD 的人都不講的事!
以下是我今天詢問原廠技術人員的問題與回答:
Q: 請問我的 SSD 完全沒救了嗎?資料還能救嗎?給錢也不能救嗎?
Ans: 是的,如果連 BIOS 都抓不到的話,那代表 SSD 控制器 (Controller) 已經將此硬碟 Shutdown,在我們原廠這邊是有工具可以做低階格式化,但格式化後資料還是會完全不見,資料無法復原。就算不低階格式化,由於 SSD 控制器關閉了記憶體區塊的存取,已經遺失可正確存取檔案的座標資訊,就算資料撈出來,也看不出內容到底是什麼,所以等同於資料損毀,救回來也沒用。
Q: 為什麼 SSD 控制器要將此硬碟 Shutdown 呢?他是怎麼判斷要不要 Shutdown 的?
Ans: SSD 固態硬碟與傳統硬碟不一樣,傳統硬碟的是磁盤,會區分出磁區來寫入資料。而 SSD 的儲存單位是記憶體顆粒,晶片也有分區塊,但是寫入時的物理特性很不一樣,在控制器內是能偵測哪些記憶體區塊有問題,也會做出基本處理,但是只要同一個區塊裡有損壞超過 5% 的容量,控制器就會無法判斷出到底資料有沒有被正確寫入到正確的區塊之中,如果還繼續讓資料寫入記憶體區塊的話,就很有可能會發生使用者覺得資料有寫入,但是事實上沒有寫入也讀不出來的情況,因此他們決定讓控制器把整顆 SSD 硬碟給 Shutdown 掉。
Q: 有沒有任何工具能夠查出有沒有記憶體區塊損壞超過 5% 的情況呢?
Ans: 沒有。
Q: 如果定時查看 S.M.A.R.T. 數據,可以分析出 SSD 即將死亡的警訊嗎?
Ans: 沒辦法,雖然上面有些數據,但僅供參考。 ( 編按:簡言之,原廠技術人員都不信了,那我們還能信嗎? )
§ 筆者備註 §
我曾經買過 Intel SSD 與 OCZ SSD,用 CrystalDiskInfo 軟體是可以查出 S.M.A.R.T. 相關數據,但兩加提供的數字與欄位都不太一樣,似乎不太具有比較的價值,但還是貼出來供各位參考:
Intel SSD 的數據如下,幾乎沒啥可參考的,但可以看出寫入總 Bytes 數,這顆硬碟已經累計寫入 29.85 TB 的資料,這樣的數據量對用來判斷該 SSD 何時會壞死一定意義都沒有 Orz …
OCZ SSD 提供的 S.M.A.R.T. 數據較多,像以下這顆硬碟的 Firmware 就是舊版的,應該要盡早升級才是,目前的最新版為 1.35,跟我一樣是 VERTEX2 的人可以從這裡下載。另外,數據中有特別多了一個 E7 欄位 ( SSD Life Left ) 代表著這顆 SSD 的生命週期還剩下多少,各位有機會就參考一下吧,當數字有變動時,就該注意了,我不確定這個數字到底有沒有參考價值。
Q: 其他 SSD 廠商也都會有相同的問題嗎?
Ans: 是的,要是能做到,早就做了。 ( 編按:肯~ 這種事為什麼不早說~~ )
Q: 因為你們的固態硬碟有保固三年,請問在你們的客戶中,這種 SSD 完全掛掉的情況很常見嗎?
Ans: 他們以前是有客戶拿硬碟來換貨,他是過保固才拿來的,而且這位仁兄每天僅使用電腦 2 小時,就一般上網而已。 ( 編按:他沒說退貨的到底多不多,但看他講這個例子就知道恐怖了,TNN 的 )
Q: 那像我們一天使用電腦十幾個小時的人來說,你對我們使用 SSD 硬碟時有什麼建議?
Ans: 一般來說我們都會建議使用者每半年到 8 個月的時間就做一次 Secure Erase 的動作,一來做完這個動作可以找出所有 SSD 裡損壞的記憶體區塊,讓控制器不再存取這些記憶體區塊,也會徹底降低控制器 Shutdown 的風險。假設你有些記憶體區塊已經損快超過 4% 了,做過一次 Secure Erase 後會讓這個比例變 0%,但記憶體區塊還是會不斷壞死,所以每過半年最好再做一次 Secure Erase 徹底清除硬碟的動作。
一般來說 SSD 固態硬碟使用一段時間後,讀寫效率會降低,但做完 Secure Erase 後,SSD 硬碟的讀寫效率會回到一開始使用 SSD 的效能,所以定時執行 Secure Erase 也有優點,缺點僅在於你的資料必須先備份,然後在執行完 Secure Erase 之後再還原資料才行。
另外,如果 SSD 有推出新的韌體 (Firmware),建議立刻升級到最新版,這樣有助於提高 SSD 硬碟的穩定度,一般來說近幾年的 SSD 都能在不影響資料的情況下進行升級,不過還是建議先行備份再執行韌體升級動作。還有,升級 SSD 韌體時,不能拿 SSD 當開機磁碟,否則會無法升級韌體。
個人電腦篇結論
經過這場 QA 的過程,心中有點憤怒,因為這些觀念與注意事項賣 SSD 的人或網站都不說清楚講明白,原廠也許會講,為什麼不大聲講 ( 因為講了就沒什麼人敢買了 XD ),要等到使用者丟失資料後才大方的說因為我們有三年保固,所以我們可以換給你一顆全新的固態硬碟嗎?
今天打去維修中心之後,對方其實二話不說,直接叫我拿硬碟去換,看樣子他們已經很熟練了,而且還因為原本的硬碟已停產,要換給我下一代的產品,讀取速度還比原本那顆還快一倍,看起來似乎頗有誠意,不過我想應該是舊的 SSD 已經壞光了沒有相同的硬碟能換吧?哈!(不好意思,還在氣憤中… :p )
如果再次問我,在桌機或筆電上能不能用 SSD 當硬碟,我會說:當然要用,但請做好備份工作!
伺服器篇
我想一般人都不太願意把自己做錯的事拿出來分享,尤其是挨踢人(IT),不管是軟體還是硬體採購,做出了錯誤的採購決策,如果不影響業務運作通常就會息事寧人、將錯就錯,因為只要承認錯誤,很有可能會導致公司高層對挨踢人員失去信心,而且很可能導致公司損失數萬到數百萬元不等 (其實常聽到損失更高的故事),所以就算買錯了還是繼續用,只要不出事就好,就算被追究起來總是有理由可以支持當初的論點。但是,今天我想要來告解一下之前曾經做過的錯事。
我曾經建議客戶使用 SSD 來加快 SQL Server 的資料查詢速度,客戶也同意了,由於 SSD 硬碟有寫入次數限制,所以一般來說沒有所謂的「試用」,買了就是買了,所以我們也做了這樣的嘗試,在伺服器上使用 SSD 硬碟,並使用 RAID 1 + 0 確保 Disk I/O 的讀寫效能並兼具資料保護的目的。
當初在覺得是否要在伺服器上使用 SSD 時也是思考了很久,也詢問了硬體廠商有沒有其他客戶也用 SSD 當資料磁碟,廠商說有!我接著問:「有沒有客戶有反應使用 SSD 有問題」,廠商說:「沒聽說過有客戶有反映問題」。最後不疑有他的「買了」。
經過一連串測試與驗證,使用單顆 SSD 的確比傳統硬碟快很多,但是當有多顆 SSD 硬碟放上含有 RAID 卡的伺服器主機上時,卻完全不是這麼一回事!當我們新的固態硬碟上線後,資料庫的寫入效能大幅降低,比傳統硬碟還慢,這你能想像嗎?但為什麼會這樣呢?我問了許多人,包括廠商的技術總監(技術能力不錯)以及多位業界知名的大師級人物,沒有人能解釋到底為什麼會這樣,我想來想去終於思考出一個合理的解釋,各位聽聽就好,我自己也不確定是不是對的,我找不到人幫我驗證我的觀念是否正確:
我之前用的傳統硬碟為 SAS 介面,其匯流排頻寬為 6Gbps,換算下來最快的寫入效能應該理想值會有768MB/s,但硬碟實際的讀寫效能最多也差不多 120MB/s 左右,但套用了 RAID 1+0,速度還會往上提升一些,實測數據的確也往上提升一些。
我們買的 SSD 硬碟是 SATA II 介面,其匯流排的頻寬為 3Gbps,換算下來最快的寫入效能應該理想值會有384MB/s,而我的 SSD 的寫入效能大概也有 220MB/s 左右,我們當然會覺得說套用了 RAID 1+0 之後,整體速度會往上提升一些,但事實卻完全相反,四顆 SSD 上架後,整體寫入速度最快最快也只有 84MB/s 而已,WTF!
備註:目前沒有任何一顆 SSD 硬碟走 SAS 介面,估計是物理特性所致,但我不清楚確切原因。
那麼我就猜啦,如果一個匯流排的頻寬為 384MB/s,套上四顆 SATA II 的 SSD 之後是不是會被除以 4 呢?那麼就是 96MB/s,這個數字再衰減一點正好與我們實測的數據 84MB/s 相近,感覺似乎有那麼一點相符!
最後,跟客戶認錯,承認決策錯誤,立即換回原本使用的傳統硬碟,連夜將資料搬離 SSD 硬碟,這事情才完美落幕,真是驚險萬分!
感謝 kivava Chang 網友補充:
速度起不來不是因為 SATA 的問題,而是該 server 用的 RAID Card 太過低階,就問題的描述上來看,這應該是一張透過 Port Multiplier 延伸的 Raid Card,搞不好實際上就是 Silicon Image or Marvell 的產品,雖然說有 RAID ,但實際對外連結頻寬就是只有一個 SATA,速度卡住很正常,花點錢換原廠高階一點的 RAID HBA絕對能解決這個問題。
網路上有許多 review 使用 LSI 高階 RAID HBA 搭配 SATA MLC SSD,跑出來的速度都很驚人,這也能證明 SATA 並不是造成 Will 保哥問題的元兇。
SAS 與 SATA 在實際使用時差異並不大,因為目前很少有單顆 SSD 在實際使用時能將頻寬塞爆,再上去,可能都會直接改用 PCI-E為介面。
SAS 主要是在容錯性、纜線距離與組成型態、熱插拔能力上與可靠度較 SATA 為佳,我不確定 SSD 有沒有 SAS 介面的產品,但印象中,我記得有伺服器專用的 SLC SSD 是使用 SAS。
伺服器篇結論
你知道的,要賣你東西的人可能不會騙你,但他們永遠不會把話說完整,就算說的完整也不會有人想聽,身為 IT 人若不想成為挨踢人還是要學著利用量化數據來分析事情,光用感覺與合理推論經常是沒用的。不可否認,有許多 IT 經驗是用時間與金錢換來的,有些時候你必須勇敢嘗試,踢到鐵板,然後才會學到經驗。
如果再次問我,在伺服器上能不能用 SSD 當硬碟,我會說:不需要!
但能用嗎?能用!只是重要的資料都不會放在上面,最後還是要依據實際情況來進行分析判斷。
感謝 kivava Chang 網友補充:
捨棄市面上主流的 MLC SSD,改為採購原廠為 server 規劃的 SLC SSD,絕對能提高 SSD 的使用壽命與可靠度,MLC SSD 除了壽命短之外,寫入資料的可靠度也比較低,個人使用上影響不大,但對於伺服器用途,我想這會是需要慎重考量的議題。
再者,使用 SLC 也能夠提高 random write 的 performance,而且提升不少,對用於 database 的 SSD,請絕對使用 SLC SSD,不要貪便宜採購 MLC SSD,不然擦屁股掉飯碗可就不好玩了。
總結論
- 無論用還是不用 SSD,請將硬碟一視同仁:定期備份。
- 如果伺服器需要不中斷服務的話,請使用備援。
- 買 SSD 是為了效能,而非穩定性,重要資料請不要放在上面。
IT 的世界與 RD 的世界截然不同,我剛好跨其兩界,有幸分享經驗,但硬體這部份實在非我所長,若本篇文章內容有任何繆誤之處,希望大家不吝給予意見、教學相長,保哥必定虛心受教,多謝。 :-)