跳到主要內容
節省工具箱Jason Tools
經驗分享

USB 外接盒讀取硬碟 SMART

Jason Cheng 發布 瀏覽 1 次
USB 外接盒讀取硬碟 SMART
本文目錄
  1. 先確認橋接晶片
  2. 使用 -d sat
  3. 讀不到完整資料的狀況
  4. 可以嘗試的參數
  5. 確認讀到的資料可不可信
  6. 讓 smartd 自動監控
  7. 選購外接盒的建議
  8. 結論
  9. 參考資料

USB 外接盒、外接硬碟櫃拿來放備份或冷資料很方便,但要檢查裡面硬碟的健康狀態時,常常會發現 smartctl -a /dev/sdc 什麼都讀不到。原因是中間隔了一顆 USB 轉 SATA 橋接晶片,smartctl 預設不知道怎麼穿過它跟硬碟對話。

這篇以常見的 JMicron(智微) 晶片為例,整理讀取 SMART 的方法,以及讀不到完整資料時可以嘗試的參數。

先確認橋接晶片

lsusb
Bus 002 Device 003: ID 152d:0578 JMicron Technology Corp. / JMicron USA Technology Corp. JMS578 SATA 6Gb/s

152d 是 JMicron 的 USB 廠商 ID,後面的 0578 是晶片型號(JMS578)。常見的還有 0567(JMS567)、0583(JMS583,這顆是 USB 轉 NVMe)。

也可以讓 smartctl 自己偵測:

smartctl --scan-open

新版 smartmontools 內建 USB 橋接晶片資料庫,很多晶片會自動選對類型,選不到才需要手動指定。

使用 -d sat

大部分新的 JMicron 晶片都支援標準的 SAT(SCSI/ATA Translation)指令轉送,加上 -d sat 就能讀:

smartctl -a -d sat /dev/sdc

實際在一台 PVE 主機上,讀一顆接在 JMicron 外接盒裡的 Toshiba 4 TB 硬碟:

=== START OF INFORMATION SECTION ===
Device Model:     TOSHIBA HDWG440
Firmware Version: 1000
User Capacity:    4,000,787,030,016 bytes [4.00 TB]
Sector Size:      512 bytes logical/physical
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART Error Log not supported
SMART Self-test Log not supported

型號、容量、整體健康狀態都讀到了,-d sat 確實有作用。

讀不到完整資料的狀況

仔細看會發現少了最重要的 SMART 屬性表(重新配置磁區數、待處理磁區、溫度、通電時數等),錯誤記錄、自我測試記錄也都是 not supported。改用 -x 讀延伸資訊:

smartctl -x -d sat /dev/sdc
Read SMART Log Directory failed: SAT command failed
General Purpose Log Directory not supported
SCT Commands not supported
Device Statistics (GP/SMART Log 0x04) not supported

一樣讀不到。硬碟本身當然支援這些功能,是這顆橋接晶片(或它的韌體)只轉送了部分指令。這種情況下 PASSED 只能當參考,看不到屬性表就無法提早發現磁區開始損壞的跡象。

可以嘗試的參數

依序試以下幾種,找出這個外接盒能讀到最多資訊的組合:

# 1. 改用 12 位元組的 SAT 指令(預設是 16)
smartctl -a -d sat,12 /dev/sdc

# 2. 舊式 JMicron 專用的轉送方式
smartctl -a -d usbjmicron /dev/sdc

# 3. 雙槽外接盒,指定第幾個埠(0 或 1)
smartctl -a -d usbjmicron,0 /dev/sdc
smartctl -a -d usbjmicron,1 /dev/sdc

# 4. 某些指令失敗時仍繼續讀其他項目
smartctl -a -d sat -T permissive /dev/sdc

注意:smartctl 官方說明特別提醒,-d usbjmicron,x(啟用 48 位元指令)在不支援的晶片上會造成 I/O 錯誤,甚至讓硬碟斷線;指定不存在的埠號也一樣。外接盒裡如果是正在寫入的資料碟,請在沒有讀寫時再測試。

外接硬碟櫃

多槽的外接硬碟櫃,內部常用 port multiplier(例如 JMB575)把多顆硬碟接到一個橋接晶片上。這種架構下每顆硬碟會出現成獨立的 /dev/sdX,不用指定埠號,一顆一顆用 -d sat 讀即可:

for d in /dev/sd[c-f]; do
    echo "== $d"
    smartctl -i -H -d sat "$d" | grep -E 'Device Model|Serial|result'
done

如果是硬體 RAID 模式的外接櫃,硬碟會被包成一個邏輯磁碟,smartctl 通常讀不到個別硬碟,只能用廠商的管理工具。

USB 轉 NVMe

JMS583 這類 USB 轉 NVMe 的晶片,要改用 -d sntjmicron:

smartctl -a -d sntjmicron /dev/sdc

確認讀到的資料可不可信

讀到屬性表之後,可以做個簡單的自我測試,確認指令真的有送到硬碟:

smartctl -t short -d sat /dev/sdc
# 等約 2 分鐘
smartctl -l selftest -d sat /dev/sdc

如果自我測試記錄有出現剛才那筆,代表這個外接盒可以完整轉送 SMART 指令;如果一直顯示 not supported,就要接受這個外接盒只能看到基本健康狀態。

讓 smartd 自動監控

確定可用的參數後,可以寫進 /etc/smartd.conf,讓 smartd 定期檢查並寄信通知:

/dev/disk/by-id/usb-TOSHIBA_HDWG440_xxxxxxxxxxxx-0:0 -d sat -a -o on -S on -s (S/../.././02) -m admin@example.com

USB 裝置重新插拔後代號(/dev/sdc)可能會變,務必用 /dev/disk/by-id/ 的路徑。

選購外接盒的建議

如果外接盒是要長期放資料用,選購時可以注意:

  • 選擇支援 UASP 與完整 SAT 轉送的晶片,購買前可以查 smartmontools 的 USB 裝置支援清單
  • 外接櫃避免選只能用硬體 RAID 模式的,選擇 JBOD(每顆獨立)的才能個別監控
  • 重要資料不要只放在單一外接硬碟上,外接盒本身也可能故障

結論

USB 外接盒讀 SMART,第一步就是加 -d sat;讀不到屬性表的話,再依序試 sat,12、usbjmicron。像這次這顆只回報 PASSED、看不到屬性表的情況,就要知道這個健康狀態的參考價值有限,重要資料還是要靠多份備份來保護。

參考資料

Jason Cheng

Jason Cheng

企業開源技術顧問,專注架構規劃與實務導入

關於作者 →

延伸閱讀