S.M.A.R.T.

S.M.A.R.T.，全稱為「Self-Monitoring Analysis and Reporting Technology」，即「自我監測、分析及報告技術」，是一種自動的硬碟狀態檢測與預警系統和規範。通過在硬碟硬體內的檢測指令對硬碟的硬體如磁頭、碟片、馬達、電路的運行情況進行監控、記錄並與廠商所設定的預設安全值進行比較，若監控情況將要或已超出預設安全值的安全範圍，就可以通過主機的監控硬體或軟體自動向使用者作出警告並進行輕微的自動修復，以提前保障硬碟數據的安全。除一些出廠時間極早的硬碟外，現在大部分硬碟均配備該項技術。

## 功能

該技術能使硬碟更穩定的運行。作用如下：

- 當硬碟的損壞程度還能在軟體可修復的範圍內（通常由廠商決定），軟體就會自動修理，防止數據的進一步損壞。同時報告異常值，異常程度為警告。
- 當硬碟的損壞程度已經超出軟體的修復承載範圍（通常由廠商決定），軟體則會盡最大能力防止再次寫入數據的丟失（如避開已損壞扇區），同時會報告異常值，異常程度為危險。
- BIOS自檢時，主板會檢測硬碟的S.M.A.R.T.資訊，如果硬碟的異常程度為危險時，會提醒使用者及時備份數據（如嗡鳴聲或顯示文字）。
- Windows 7或以上的Windows系統，如果檢測到硬碟的S.M.A.R.T.錯誤，也會彈出警告視窗，提示使用者備份資料。

## 歷史

最早期的硬碟監控技術起源於1992年IBM在為AS/400電腦的IBM9337硬碟陣列中的IBM 0662 SCSI2代硬碟驅動器之中，後來該技術被命名為Predictive Failure Analysis（故障預警分析技術），它是通過在固件中測量幾個重要的硬碟安全參數和評估他們的情況。從物理硬碟發送到監控軟體的結果中被限定兩種結果：「硬碟安全」和「硬碟不久後會發生故障」。

不久，由個人電腦製造商Compaq和硬碟製造商Seagate、Quantum和Conner提出了名為IntelliSafe的類似技術。通過該技術，硬碟會測量自身的的健康指標並將參量值傳送給作業系統和使用者的監控軟體中，每個硬碟生產商有權決定哪些指標需要被監控和它們的安全閾值。

Compaq於1995年早期將該項技術方案提交到Small Form Factor委員會進行標準化，該方案得到IBM、Seagate、Quantum、Conner和Western Digital所支持。由於IntelliSafe技術的靈活性，委員會接受了該方案，並正式更名S.M.A.R.T.技術，將其標準化並推廣至ATA-3行業標準中。

## 運作原理

該技術所需數據被存放在硬碟物理盤面最前面的磁軌中，由硬碟製作商將相關管理程序和數據該磁軌中，包括加解密程序，自監控程序，自修復程序等，主機的監控軟體可以通過「SMART RETURN STATUS」的命令讀取S.M.A.R.T.資訊，且這些資訊不允許被使用者直接修改。

## 檢測屬性

下面將列出一些S.M.A.R.T.的原始檢測屬性和含義。普遍為檢測值越高性能越好。即使所有製造商都必須遵守共同的規則，但由於有些檢測值在不同硬碟製造商中用不全相同的定義和計量方法而對於不同製作商來說檢測值不全是越高越好，所以下面屬性的指標只作一般參考。除外，各製造商也會根據自己需要添加一些自己專有的檢測屬性。

<image>

｜表示數值越高越好

<image>

｜表示數值越低越好

重要項：粉色底｜當超出安全範圍會對性能嚴重影響，甚至導致數據丟失。

ID｜ID十六進位值｜英文名｜中文譯名｜最優｜說明

1｜0x01｜Read Error Rate｜底層數據讀取錯誤率｜

<image>

｜存儲器從一個硬碟表面讀取數據時發生的錯誤率。原始值由於不同廠商的不同計算方法而有所不同，其十進位值往往無意義的。

2｜0x02｜Throughput Performance｜讀寫通量性能｜

<image>

｜通常是硬碟讀寫性能的測量值，如果其值有變動，有可能硬碟出現了問題。

3｜0x03｜Spin-Up Time｜碟片啟動時間｜

<image>

｜碟片由靜止啟動加速到穩定正常運行速度的平均所需時間。

4｜0x04｜Start/Stop Count｜電機起停次計數｜

<image>

｜一個碟片啟動關閉周期的統計值，只有硬碟從完全斷電中啟動或從睡眠模式恢復，碟片主軸電機被啟動時才會記一次數。

5｜0x05｜Reallocated Sector Count｜重定位磁區計數｜

<image>

｜記錄由於損壞而被映射到無損的後備區的磁區計數。當硬碟出現損壞磁區時，可以通過將其物理空間指向到特定的無損區域進行重映射修復，從而出現壞磁區的硬碟仍可使用。但當高過一定數值後，後磁區消耗殆盡而無法再重映射修復時，這些壞磁區就會顯現出來且無法自行修復。除外由於要要求磁頭讀取這些壞磁區時專門再移動到後備區讀寫數據，對硬碟讀寫性能也有影響。

6｜0x06｜Read Channel Margin｜信道讀取餘量｜讀取數據時信道可用的餘量，該屬性沒制定任何功用。

7｜0x07｜Seek Error Rate｜尋道錯誤率｜（該屬性是特定製造商才有的）磁頭尋找磁軌由於機械問題而出錯機率，有多種原因可能引致出錯，如：磁頭伺服構件，盤體過熱，或損壞。於不同廠商的不同計算方法而有所不同，其十進位值往往無意義的。

8｜0x08｜Seek Time Performance｜尋道性能｜

<image>

｜每次尋道時間的平均值，該值短期內迅速減少，有可能硬碟出現了問題。

9｜0x09｜Power-On Hours｜硬碟加電時間｜

<image>

｜硬碟自出廠以來加電啟動的統計時間，單位為小時（或根據製造商設定為分鐘或秒），一般使用者以該值判定硬碟是否被使用過。

10｜0x0a｜Spin Retry Count｜電機起轉重試｜

<image>

｜S.M.A.R.T參數電機起轉重試，表明了主軸電機的啟動嘗試次數。這個屬性存儲了關於主軸電機嘗試加速到完全可操作速度的次數（在這種情況下，意味著主軸電機的第一次啟動嘗試沒有成功）。主軸電機頻繁的嘗試啟動，意味著硬碟驅動器的壽命可能將近實際限值。

11｜0x0b｜Recalibration Retries｜磁頭校準重試｜

<image>

｜磁頭在一次運行失敗時嘗試校準至正常狀態的統計數，該值改變時意味著硬碟的機械部件已經出現問題了。

12｜0x0c｜Power Cycle Count｜設備開關計數｜該屬性表示硬碟電源充分開/關循環計數。

13｜0x0d｜Soft Read Error Rate｜軟體讀取錯誤率｜

<image>

｜作業系統讀取數據時的出錯率。

183｜0xb7｜SATA Downshift Error Count｜SATA降級運行計數｜Western Digital 和 Samsung 特有屬性，記錄由於兼容問題導致降低SATA傳輸級別運行的計數。

184｜0xb8｜End-to-End error｜終端校驗出錯｜

<image>

｜HP專有S.M.A.R.T.（SMART IV）技術的一個特有屬性，記錄硬碟從碟片讀取數據到高速緩存後再傳輸到主機時數據校驗出錯的次數。

185｜0xb9｜Head Stability｜磁頭穩定性｜Western Digital特有屬性

186｜0xba｜Induced Op-Vibration Detection｜Western Digital特有屬性

187｜0xbb｜Reported Uncorrectable Errors｜報告不可糾正錯誤｜

<image>

｜硬體ECC無法恢復的錯誤計數。

188｜0xbc｜Command Timeout｜通信超時｜

<image>

｜由於無法連接至硬碟而終止操作的統計數，一般為0，如果遠超過0，則可能電源問題，數據線接口氧化或更嚴重的問題。

189｜0xbd｜High Fly Writes｜磁頭寫入高度｜

<image>

｜硬碟進行寫入時對磁頭高度進行監控以提供額外的保障。當磁頭處於不正常高度進行寫入時，寫入操作會被終止，原有數據重寫入或者將該扇區重映射到安全區域。該屬性是統計值。

190｜0xbe｜Airflow Temperature｜氣流溫度｜

<image>

｜Western Digital特有屬性，計量硬碟內氣流溫度，和檢測項0xc2相似。

191｜0xbf｜G-sense Error Rate｜加速度錯誤率｜

<image>

｜計量可能對硬碟做成損害的衝擊次數。

192｜0xc0｜Power-off Retract Count｜電源關閉磁頭收回計數｜

<image>

｜計量磁頭在沒有加電時不移進硬碟的值。

193｜0xc1｜Load Cycle Count ｜磁頭釋放收回循環｜

<image>

｜計量磁頭在加電時移至停泊區和移至碟片循環的值。

194｜0xc2｜Temperature ｜溫度｜

<image>

｜如果有合適的傳感器的話，這裡會顯示硬碟溫度。請注意該溫度並非直接的攝氏度或華氏度。通常來說，將原始值的最低兩位字節轉化成十進位，即為精確的溫度值（單位：攝氏度）。例如：原始值為0x003600090023，將0x23轉換為十進位為35，則硬碟溫度為35度。

195｜0xc3｜Hardware ECC Recovered ｜硬體ECC恢復｜（特定原始值）

196｜0xc4｜Reallocation Event Count｜重定位事件計數｜

<image>

｜記錄已重映射扇區和可能重映射扇區的事件計數。

197｜0xc5｜Current Pending Sector Count｜等候重定的扇區計數｜

<image>

｜記錄了不穩定的扇區的數量。

198｜0xc6｜Uncorrectable Sector Count｜無法校正的扇區計數｜

<image>

｜記錄肯定出錯的扇區數量。

199｜0xc7｜UltraDMA CRC Error Count｜UltraDMA通訊CRC錯誤｜

<image>

｜記錄硬碟通訊時發生的CRC錯誤。

200｜0xc8｜Multi-Zone Error Rate｜多區域錯誤率｜

<image>

｜寫入一個區域時發現的錯誤的計數。

200｜0xc8｜Write Error Rate ｜寫入錯誤率｜

<image>

｜Fujitsu的特別屬性，寫入一個區域時發現的錯誤的計數。

201｜0xc9｜Soft Read Error Rate｜邏輯讀取錯誤率｜

<image>

｜記錄脫軌錯誤。

202｜0xca｜Data Address Mark errors｜數據地址標記錯誤｜

<image>

｜記錄數據地址標記錯誤（或製造商特定的計數）

203｜0xcb｜Run Out Cancel｜用完取消｜

<image>

｜ECC錯誤計數

204｜0xcc｜Soft ECC Correction｜邏輯ECC糾正｜

<image>

｜記錄由軟體ECC更正的錯誤計數。

205｜0xcd｜Thermal Asperity Rate ｜熱嘈率｜

<image>

｜記錄高溫導致的出錯記數。

206｜0xce｜Flying Height｜飛行高度｜記錄磁頭的飛行高度。飛得太低會增加磁頭撞毀的機會，飛得太高增加讀寫錯誤的機會。

207｜0xcf｜Spin High Current｜主軸電機浪涌電流計數｜

<image>

｜記錄主軸電機運轉時浪涌電流的次數。

208｜0xd0｜Spin Buzz｜電機啟動失敗｜記錄由於電力不足而啟動主軸電機的蜂鳴聲次數。

209｜0xd1｜Offline Seek Performance｜離線尋址效能｜在其內部測試硬碟的尋址能力表現。

210｜0xd2｜？｜？｜（沒定性，出現在Maxtor 6B200M0 200GB 和Maxtor 2R015H1 15GB 的硬碟中）

211｜0xd3｜Vibration During Write｜寫操作震動｜記錄寫入操作的震動數。

212｜0xd4｜Shock During Write｜寫操作衝擊｜記錄寫入操作時的衝擊數。

220｜0xdc｜Disk Shift｜盤體偏移｜

<image>

｜記錄盤體由於衝擊或溫度導致偏離主軸的相對距離。

221｜0xdd｜G-Sense Error Rate｜加速計出錯率｜

<image>

｜從外部誘發的衝擊和振動產生的錯誤計數。

222｜0xde｜Loaded Hours｜數據加載時間｜數據讀取時所花費的時間。（磁頭移動時間）

223｜0xdf｜Load/Unload Retry Count｜加載/卸載重試次數｜磁頭改變位置時所需時間。

224｜0xe0｜Load Friction｜負載摩擦｜

<image>

｜讀寫時由於機械摩擦做成的阻力。

225｜0xe1｜Load/Unload Cycle Count｜加載/卸載循環計數｜

<image>

｜總負載周期計數。

226｜0xe2｜Load 'In'-time｜磁頭加載耗時｜磁頭加載所需總時間（不包括在停泊區的花費）。

227｜0xe3｜Torque Amplification Count｜扭矩放大計數｜

<image>

｜嘗試來補償碟片的速度變化的計數。

228｜0xe4｜Power-Off Retract Cycle｜斷電縮回周期｜

<image>

｜切斷電源後電磁樞自動縮回的時間計數。

230｜0xe6｜GMR Head Amplitude｜GMR磁頭振幅｜磁頭振幅計數（磁頭反覆正反向運動距離）。

231｜0xe7｜Temperature｜硬碟溫度｜

<image>

｜記錄硬碟溫度。

232｜0xe8｜Endurance Remaining｜耐久性剩餘｜磁碟可使用周期與設計可使用周期的百分比。

232｜0xe8｜Available Reserved Space｜可用保留空間｜Intel固態硬碟報告的可提供的預留空間占作為一支全新的固態硬碟預留空間的百分比。

233｜0xe9｜Power-On Hours｜加電時間｜處於開機狀態的小時數。

233｜0xe9｜Media Wearout Indicator｜介質耗損指標｜Intel固態硬碟報告的NAND刷寫壽命，全新時值為100，最低值為1，其跌幅隨NAND的擦除周期增加而在0到最大額定周期範圍減少。

240｜0xf0｜Head Flying Hours｜磁頭飛行時間｜磁頭處於定位中的時間。

240｜0xf0｜Transfer Error Rate｜傳輸錯誤率｜在數據傳輸時連接被重置的次數計數。（Fujitsu特有屬性）

241｜0xf1｜Total LBAs Written｜LBA寫入總數｜LBA寫入總數計數。

242｜0xf2｜Total LBAs Read｜LBA讀取總數｜LBA讀取總數計數，部分S.M.A.R.T.檢測程序會把原始值顯示為負數，這是因為該原始值為48位，而不是32位的。

250｜0xfa｜Read Error Retry Rate｜讀取錯誤重試率｜

<image>

｜從磁碟讀取時的錯誤計數。

254｜0xfe｜Free Fall Protection｜自由跌落保護｜

<image>

｜對「自由落體事件」檢測計數。

## 在非ATA平台上的實現

### SCSI

硬碟的傳輸埠平台主要分為ATA和SCSI兩個平台。作為一種硬碟的檢測技術，理論上都能在兩個平台上實現的，但由於兩個平台也存在巨大的不同，S.M.A.R.T.在SCSI上的實現和在ATA的實現上也有所不同。首先，作為ATA上的專有規範，S.M.A.R.T.對ATA系統的干預要比SCSI更明顯，S.M.A.R.T.對SCSI更多是起到檢測的作用，即使在檢測到磁碟有故障時，其只是報告監控端，要人為地處理故障。其次，由於SCSI平台的硬碟比ATA的更為複雜，所以其檢測屬性也比ATA的多和複雜準確，如包括對碟片和驅動電路版的溫度檢測（ATA多僅對碟片溫度檢測），對電壓的檢測等。

### USB

在USB標準中，USB不能用於電腦內部儲存設備的基本總線（如ATA，SCSI等），其本身沒有為S.M.A.R.T.提供傳輸數據的途徑。在使用ATA硬碟，以USB為傳輸埠的移動硬碟中，即使硬碟內S.M.A.R.T.仍然運作，但沒辦法直接向系統提供S.M.A.R.T.的數據。現在新的移動硬碟的內部驅動轉換電路已經能以一些方法將硬碟內S.M.A.R.T.的數據通過USB傳輸到系統或監控程序中讀取。