Skip to main content

Kocoji's Blog

Sử dụng smartctl để kiểm tra sức khỏe ổ cứng

Bài viết này mình tổng hợp lại với mục đích: cung cấp cho bạn cách dựa vào thông số từ smartctl để chuẩn đoán tình trạng sức khỏe của ổ cứng, cũng như một số lệnh mình sử dụng và thấy hữu ích trong quá trình kiểm tra ổ cứng.

## I. Giới thiệu về S.M.A.R.T

Từ SMART trong trường hợp này, là viết tắt của Self-Monitoring, Analysis and Reporting Technology. Đây hệ thống giám sát sức khỏe được tích hợp sẵn trong các ổ cứng (cả SSD lẫn HDD), các thông số được controller giám sát và thu thập lại từ nhiều cảm biến khác nhau và giúp quản trị viên có thể dựa vào những kết quả này để nhận biết được ổ cứng vật lý đang sử dụng có bị lỗi hay không.

Mình cũng xin lưu ý thêm: Mỗi nhà sản xuất có thể sẽ có tham số (Atrribute) khác nhau, có hãng có tham số này, hãng khác lại không. Hay, cùng ID là vậy, nhưng bên hãng A có Attribute_Name khác hãng B. Vậy nên, sau khi tham khảo thông số từ smartctl. Bạn nên đọc thêm các tài liệu liên quan từ nhà sản xuất ổ cứng để biết thêm các thông tin quan trọng (vd keyword: hãng sản xuất + smart attributes) hoặc tham khảo https://en.wikipedia.org/wiki/S.M.A.R.T.#Known_ATA_S.M.A.R.T._attributes.

## II. Nội dung chính

Dưới đây là một ví dụ output từ smartctl của một ổ cứng - có tên là sda, sẽ gồm các cột như sau.

root@sv01:~# smartctl -A /dev/sda

SMART Attributes Data Structure revision number: 1  
Vendor Specific SMART Attributes with Thresholds:  
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE  
 5 Reallocated_Sector_Ct   0x0033   100   100   010    Pre-fail  Always       -       0  
 9 Power_On_Hours          0x0032   093   093   000    Old_age   Always       -       31950  
12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       56  
177 Wear_Leveling_Count     0x0013   082   082   000    Pre-fail  Always       -       263  
179 Used_Rsvd_Blk_Cnt_Tot   0x0013   100   100   010    Pre-fail  Always       -       0  
181 Program_Fail_Cnt_Total  0x0032   100   100   010    Old_age   Always       -       0  
182 Erase_Fail_Count_Total  0x0032   100   100   010    Old_age   Always       -       0  
183 Runtime_Bad_Block       0x0013   100   100   010    Pre-fail  Always       -       0  
187 Uncorrectable_Error_Cnt 0x0032   100   100   000    Old_age   Always       -       0  
190 Airflow_Temperature_Cel 0x0032   083   057   000    Old_age   Always       -       17  
195 ECC_Error_Rate          0x001a   200   200   000    Old_age   Always       -       0  
199 CRC_Error_Count         0x003e   099   099   000    Old_age   Always       -       7  
235 POR_Recovery_Count      0x0012   099   099   000    Old_age   Always       -       43  
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       144313306552
  • Identifier:
    • Mã định danh của tham số, bắt đầu từ 1 đến 250. Các phần mềm đọc SMART như crystaldiskInfo hay smartctl sẽ hiển thị Attribute_Name từ mã định danh này
  • Attribute_Name:
    • Tên tham số/thuộc tính của bản ghi.
  • Thresh:
    • Giá trị tối thiểu của tham số mà nhà sản xuất cung cấp
    • Nếu Value bằng hoặc thấp hơn tham số này, có nghĩa ổ cứng bị lỗi.
  • Value:
    • Giá trị hiện tại, được tính dựa vào kết quả của Raw Value.
    • Giá trị bắt đầu từ 100, 200, hoặc 253 - tùy vào nhà sản xuất. Và sẽ giảm dần theo thời gian.
    • Giá trị nên lớn hơn Thresh.
    • Giá trị càng cao càng tốt.
  • Worst:
    • Giá trị thấp nhất hiện tại mà cảm biến/controller ghi lại.
    • Giống với Value, giá trị càng cao và lớn hơn Thresh càng tốt.
  • Raw Value:
    • Giá trị thực tế mà cảm biến ghi lại được, vd: Power_On_Hours: 31950 ứng với 31950 giờ…
  • Type:
    • Pre-fail: Ám chỉ thuộc tính quan trọng, phản ánh trực tiếp sức khỏe ổ cứng. Khi test SMART health, sẽ dựa theo điều kiện: nếu Worst < Threshold, kết quả trả về Fail.
    • Old_age: các thuộc tính ít quan trọng hơn Pre-fail, thường sẽ chỉ đến các tham số sử dụng theo thời gian, hao mòn cell nhớ, VD: Power_On_Hours, Total_LBAs_Written
    • Tùy vào nhà sản xuất sẽ quy định kiểu Type cho từng Tham số.
  • Updated:
    • Always: Liên tục tự động cập nhật giá trị
    • Offline: Chỉ cập nhật lại tham số trong trường hợp chạy SMART test.
  • When_Failed:
    • - : Tham số bình thường
    • FAILING_NOW: giá trị lỗi (WORST < THRESH)
  • Flags: (không quan trọng) Được biểu diễn ở giá trị Hex, có thể xem thêm ý nghĩa của flag với lệnh smartctl -A /dev/sdX -f brief

## III. Lệnh bổ trợ khác

  • Kiểm tra tổng quan sức khỏe smartctl -H /dev/sda
smartctl 7.2 2020-12-30 r5155 [aarch64-linux-5.15.0-1011-raspi] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
  • Liệt kê các lỗi trên mà controller ghi lại, nếu có smartctl -l error /dev/sda

  • Self-test Thông thường, sẽ sử dụng short/long test smartctl --test=short /dev/sda Hoặc smartctl --test=long /dev/sda

  • Xem lại danh sách selftest trước đó smartctl -l selftest /dev/sda

Kết. Cảm ơn các bạn đã đọc, nếu có gợi ý sửa lỗi và cải thiện. Mong các bạn liên hệ lại mình qua telegram: @kocoji

Reference links