こんにちは~ちょっとお聞きしたいのですが、TR-004内のハードディスクの詳細情報、特に「型番」と「シリアル番号」を一度にファイルに出力する方法はありますか?
できれば直接テキストファイルとして保存できると、自分で一台ずつ書き写す手間が省けて助かります~
TR-004はWindowsに接続するものですか、それともNASに接続するものですか?
NAS上で、会社は他のエンドポイント管理ソフトウェアを利用して、関連機器のディスクを一元管理しています。もしNASに接続されているTR装備内のハードディスクも簡単にCSVファイルとしてエクスポートできれば、そのCSVをエンドポイントソフトウェアにインポートすることで、管理が非常に便利になります。もし対応できるなら、とても素晴らしいです。
現時点では直接インターフェースは提供されていないと思いますが、ssh操作ができる場合は比較的簡単だと思います。私の手元にはTR-004がありませんが、可能であれば以下のコマンドを試してみてください。
[qnap@NAS ~]$ qcli_storage -d
Enclosure Port Sys_Name Type Size Alias Signature Partitions Model
NAS_HOST 3 /dev/sdd HDD:data 7.28 TB 3.5" SATA HDD 1 -- 5 Seagate ST8000VX010-2ZR188
NAS_HOST 4 /dev/sdc HDD:data 7.28 TB 3.5" SATA HDD 2 -- 5 Seagate ST8000VX010-2ZR188
NAS_HOST 5 /dev/sdb HDD:data 7.28 TB 3.5" SATA HDD 3 -- 5 Seagate ST8000VX010-2ZR188
NAS_HOST 6 /dev/sda HDD:data 7.28 TB 3.5" SATA HDD 4 -- 5 Seagate ST8000VX010-2ZR188
理論的には、EnclosureがTR-004に属するハードディスクが見えるはずです。
そして、以下のような情報も確認できます。
sudo hdparm -i /dev/sdX |grep Model
Model=ST8000VX010-2ZR188 , FwRev=CV10 , SerialNo= WPVXXXX4
/dev/sdXはTR-004のハードディスクに置き換えてください。
もしCSV形式で整理したい場合は、bashやpythonでスクリプトを作成できます。
整理せず、単にテキストファイルとしてコピーしやすくしたい場合は、以下のようにできます:
sudo hdparm -i /dev/sdX |grep Model >> /share/Public/hdd.txt
スクリプト化が必要な場合は、TR-004のNASで上記コマンドの出力を見てから、どのように変換するか考える必要があります。
実際にTR-004を借りてきて、出力を確認した後、以下のようにスクリプトをまとめました。このスクリプトをNASにsshで接続して実行してください。必要に応じて自分で修正することも可能です。
使い方
–csv を付けるとCSVファイルとして出力され、同じフォルダに保存されます。
enc 数字パラメータを付けない場合、NAS上の全ディスクが一覧表示されます。
以下の内容をコピーして hdd_id.sh という名前で保存し、chmod +x で実行権限を付与してください。
#!/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
# Parse options
CSV=0
if [ "$1" = "--csv" ]; then
CSV=1
shift
fi
# Build enclosure list
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; }
# Prepare output file name in CSV mode using uname -n and date
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}"
# Enumerate disks for this enclosure and print Brand, Model, Serial per slot
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}
# Capture header indexes once
!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 # Brand
if($i=="model") mid=i
if($i=="serial_no") sid=i
}
hdr=1; next
}
# Data rows: first field is numeric (port_id)
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