回答:
現在のほとんどのディストリビューションでは、HDDのシリアル番号はudevデータベースに保存されており、ルート権限なしで照会できます。
/sbin/udevadm info --query=property --name=sda
(外観のためID_SERIAL
、ID_SERIAL_SHORT
;もある/dev/disk/by-id/ata-*
これらの値に基づいて、ATAドライブのシンボリックリンク)。
udisks
これらのデータなどに高レベルのインターフェイスを提供します(また、たとえばsmartctl
直接呼び出しに必要なルート権限を必要とせずにSMART属性にアクセスできます)。
通常機能する別の方法は次のとおりです。
ls -l /dev/disk/by-id/
ドライブとモデル/シリアル番号をすばやく列挙できる1つのライナーを次に示します。
ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print $NF " " $(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'
または、リモートマシンの場合:
ssh $host "ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print \$NF \" \" \$(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'"
その後、この出力をさらに処理できます。ほとんどのドライブタイプでは、1行あたりの2番目の文字列はMODEL_SERIALです。
wombleが言ったように、rootアクセスなしで、または何らかのプロセスにrootのような許可を与えなければ、これを達成することはできません。ただし、あなたは初心者だと言っているので、という便利なコマンドについて注意しましょうlshw
。
/ dev / disk / by-idの下のリンクは、udevによって作成されます。/etc/udev/rules.d/50-udev.rulesには、次のような行があります。
KERNEL=="sd*[!0-9]|sr*", SYSFS{ieee1394_id}=="*", ENV{ID_SERIAL}="$sysfs{ieee1394_id}", ENV{ID_BUS}="ieee1394"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/usb_id -x"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -s %p -d $tempnode"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -a -s %p -d $tempnode"
KERNEL=="nst[0-9]*|st*|sd*[!0-9]|sr*|dasd*[!0-9]|cciss?c", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"
残念ながらby-id
、デバイスの名前からこのシンボリックリンクを見つけることは簡単ではありません。しかし、少なくとも1つの直接的な方法があります。
$ udevinfo -q path -n /dev/sda
/block/sda
$ udevinfo -q symlink -p /block/sda
disk/by-id/scsi-SATA_KINGSTON_SVP100_31JY100MY5SK disk/by-path/pci-0000:00:11.0-scsi-0:0:0:0
スペースで区切られたリストが返されます。そのため、by-id
パスを見つけることができます。
または、「複合」シリアル番号を直接取得できます。
$ udevinfo -q env -p /block/sda
ID_VENDOR=ATA
ID_MODEL=KINGSTON_SVP100S
ID_REVISION=CJR1
ID_SERIAL=SATA_KINGSTON_SVP100_31JY100MY5SK
ID_TYPE=disk
ID_BUS=scsi
ID_PATH=pci-0000:00:11.0-scsi-0:0:0:0
ID_SERIAL
最後のアンダースコアの後では、シリアル番号を取得できます。
シリアル番号には英数字と「-」を含めることができます(このようなSCSI HDDがあります)。シリアル番号に関する制限を知っている人はいますか?「_」を含めることができる場合、このメソッドは防弾ではありません。
ID_MODEL
(それは私には思える)とキーは、その最初の15の文字が追加され、より正確にはシリアル番号の先頭をローカライズするために使用することができID_SERIAL
(「_」に置き換えスペース)。
udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'
もちろん、-q property
除外することもできますが、udevadm
必要のない追加の行を出力できるようにすることは常にリソースの無駄だと思います。
udisks --show-info
.__ But__をバッチモードまたは一般的にスクリプトで使用する場合、ことに注意しなければならないudisks
WAYよりも遅いですudevadm
。