此頁面為機器翻譯版本,請參閱機器翻譯免責聲明
切換為English

How do I export hard disk and enclosure information from my NAS using a script?
如何使用指令碼從我的 NAS 匯出硬碟和外接盒資訊?


最後修訂日期: 2025-09-17

適用產品

NAS (QTS / QuTS hero)


情境

如果您使用的 QNAP NAS 配有擴充單元,您可能會想要匯出所有已安裝硬碟的詳細資訊,例如品牌、型號和序號,以便記錄或盤點。雖然這些資訊會顯示在圖形介面中,但進階使用者可以透過 SSH 使用命令列擷取並匯出這些磁碟詳細資訊。這對於自動化或盤點 IT 資產非常有幫助。


程式

  1. 在您的 QNAP NAS 上啟用 SSH 存取
    注意:啟用 SSH 可能會帶來安全風險。請確保使用強密碼,並在不使用時停用 SSH。
  2. 透過 SSH 連線至您的 NAS使用 SSH 客戶端(例如 PuTTY 或 Terminal)。
  3. 使用提供的hdd_id.sh指令碼來匯出磁碟資訊:
    • 下載或建立指令碼:將以下內容儲存為hdd_id.sh在您的 NAS 上:
      !/bin/sh  用法:    ./hdd_id.sh                所有機箱,使用 tab 分隔(輸出到 stdout)    ./hdd_id.sh --csv          所有機箱,寫入--DiskList.csv    ./hdd_id.sh 1              僅 enc_id=1,使用 tab 分隔    ./hdd_id.sh --csv 1        僅 enc_id=1,寫入--DiskList.csv  CSV=0 if ["$1" = "--csv"]; then   CSV=1   shift fi  if [-n "$1"]; then   ENC_LIST="$1" else   ENC_LIST=$(hal_app --se_enum 2>/dev/null | awk '/^=/{next}     NF==0{next}     /(^|[[:space:]])enc_id($|[[:space:]])/ {hdr=1; next}     hdr && $1 ~ /^[0-9]+$/ {print $1}' | sort -n | uniq) fi  [-z "$ENC_LIST"] && {echo "未找到機箱 enc_id。"; exit 1;}  OUTFILE=""DELIM="\t"if [$CSV -eq 1]; then   HOSTNAME=$(uname -n 2>/dev/null)   [-z"$HOSTNAME"] && HOSTNAME="NAS"DATESTR=$(date +%Y%m%d)   OUTFILE="${HOSTNAME}-${DATESTR}-DiskList.csv"DELIM=","echo"Enclosure,Slot,Brand,Model,Serial">"$OUTFILE"fi  for ENC in $ENC_LIST; do   NAME=$(hal_app --se_get_jbod_display_name enc_id=$ENC 2>/dev/null)   [-z"$NAME"] && NAME="ENC_${ENC}"hal_app --pd_enum enc_id=$ENC 2>/dev/null | awk -v name="$NAME"-v D="$DELIM"-v csv="$CSV"-v out="$OUTFILE" '     /^=/{next}     NF==0{next}     !hdr && /(^|[[:space:]])port_id($|[[:space:]])/ && /vendor/ && /model/ && /serial_no/ {       for(i=1;i<=NF;i++){if($i=="port_id")    pid=i         if($i=="vendor")     bid=i         if($i=="model")      mid=i         if($i=="serial_no")  sid=i       }       hdr=1; next     }     hdr && $1 ~ /^[0-9]+$/ && pid>0 && bid>0 && mid>0 && sid>0 {line = name D $(pid) D $(bid) D $(mid) D $(sid)       if (csv==1) {print line>> out       } else {print line}     }   ' done
    • 使指令碼可執行:
      chmod +x hdd_id.sh
    • 根據需要執行指令碼:
      • ./hdd_id.sh— 列出所有機箱,將以標籤分隔的資料輸出到終端。
      • ./hdd_id.sh --csv— 列出所有機箱,輸出到名為<host>-<yyyymmdd>-DiskList.csv 的 CSV 檔案。
      • ./hdd_id.sh 1— 只列出機箱enc_id=1,以標籤分隔。
      • ./hdd_id.sh --csv 1— 只列出機箱enc_id=1,輸出到 CSV。
    • 範例輸出:
      ENC_03TOSHIBAMC04ACA300E85G9XXXXFLVA
      ENC_06SeagateST8000VX010-2ZR188WPV0XYZZ
      ENC_07SeagateST8000VX010-2ZR188WPV0ZZZZ
      ENC_08SeagateST8000VX010-2ZR188WPVXXXR5
      TR-004-N0011SeagateST4000NE001-2MA101WS24ZZZB
      TR-004-N0012SeagateST4000NE001-2MA101WS24XXXY

      每行包含:機箱名稱,插槽,品牌,型號,序號。

    • 下載匯出的檔案(如果使用--csv)從您的 NAS 使用 File Station 或 SMB/CIFS。



進一步閱讀

這篇文章有幫助嗎?

謝謝您,我們已經收到您的意見。

請告訴我們如何改進這篇文章:

如果您想提供其他意見,請於下方輸入。

選擇規格

      顯示更多 隱藏更多

      選擇其他偏好的語言:

      open menu
      back to top