FAQ Jak mogę eksportować informacje o dysku twardym i obudowie z mojego NAS-a, używając skryptu?

Odpowiednie produkty
NAS (QTS / QuTS Hero)



Scenariusz
Jeśli używasz QNAP NAS z jednostką rozszerzającą, możesz chcieć wyeksportować szczegółowe informacje o wszystkich zainstalowanych dyskach twardych — takie jak marka, model i numer seryjny — do celów dokumentacji lub inwentaryzacji. Chociaż te informacje są dostępne w interfejsie graficznym, zaawansowani użytkownicy mogą pobrać i wyeksportować te szczegóły dysków za pomocą wiersza poleceń przez SSH. Jest to przydatne do automatyzacji lub sporządzania spisu zasobów IT.



Procedura

  1. Włącz dostęp SSH na swoim QNAP NAS.
    Uwaga: Włączenie SSH może wiązać się z ryzykiem bezpieczeństwa. Upewnij się, że używasz silnych haseł i wyłącz SSH, gdy nie jest używane.
  2. Połącz się z NAS przez SSH za pomocą klienta SSH (takiego jak PuTTY lub Terminal).
  3. Użyj dostarczonego skryptu `hdd_id.sh` do eksportowania informacji o dyskach:
    • Pobierz lub utwórz skrypt: Zapisz następującą zawartość jako `hdd_id.sh` na swoim NAS:
      Kod:
      #!/bin/sh
      # Usage:
      #   ./hdd_id.sh               # all enclosures, tab-separated (to stdout)
      #   ./hdd_id.sh --csv         # all enclosures, write to <HOST>-<YYYYMMDD>-DiskList.csv
      #   ./hdd_id.sh 1             # only enc_id=1, tab-separated
      #   ./hdd_id.sh --csv 1       # only enc_id=1, write to <HOST>-<YYYYMMDD>-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 "No enclosure enc_id found."; 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
    • Uczyń skrypt wykonywalnym:
      Kod:
      chmod +x hdd_id.sh
    • Uruchom skrypt według potrzeb:
      • `./hdd_id.sh` — Wyświetla wszystkie obudowy, wyprowadza dane rozdzielone tabulatorami do terminala.
      • `./hdd_id.sh --csv` — Wyświetla wszystkie obudowy, wyprowadza dane do pliku CSV o nazwie `<HOST>-<YYYYMMDD>-DiskList.csv`.
      • `./hdd_id.sh 1` — Wyświetla tylko obudowę z `enc_id=1`, rozdzielone tabulatorami.
      • `./hdd_id.sh --csv 1` — Wyświetla tylko obudowę `enc_id=1`, wyprowadza dane do CSV.
    • Przykładowy wynik:
      Kod:
      ENC_0	3	TOSHIBA	MC04ACA300E	85G9XXXXFLVA
      ENC_0	6	Seagate	ST8000VX010-2ZR188	WPV0XYZZ
      ENC_0	7	Seagate	ST8000VX010-2ZR188	WPV0ZZZZ
      ENC_0	8	Seagate	ST8000VX010-2ZR188	WPVXXXR5
      TR-004-N001	1	Seagate	ST4000NE001-2MA101	WS24ZZZB
      TR-004-N001	2	Seagate	ST4000NE001-2MA101	WS24XXXY
      Każda linia zawiera: Nazwa obudowy, Slot, Marka, Model, Numer seryjny.
    • Pobierz wyeksportowany plik (jeśli użyto `--csv`) z NAS za pomocą File Station lub SMB/CIFS.



Dalsze czytanie