回答:
ルート権限を必要としない別のソリューション:
udevadm info --query=all --name=/dev/sda | grep ID_SERIAL
これは実際にはlsblk
don_crisstiが言及しているライブラリです。しかし、私のバージョンのlsblkにはシリアルのオプションが含まれていません。
grep ID_SCSI_SERIAL
で報告されるワールドワイド名(wwn)とは対照的に、実際にドライブのシリアル番号を提供するものである可能性がありますID_SERIAL
。
ID_SCSI_SERIAL
類似するものも何もない(no ID_ATA_SERIAL
): E: ID_SERIAL=TOSHIBA-TR150_23SC51E8J2BI ... E: ID_SERIAL_SHORT=23SC51E8J2BI ... E: ID_WWN=0x5e83a97200463ff3 ... E: ID_WWN_WITH_EXTENSION=0x5e83a97200463ff3
ターミナルタイプ:
# hdparm -I /dev/sd? | grep 'Serial\ Number'
編集:lshw
またはを使用することもできますsmartctl
lshw
# lshw -class disk
smartctl
# smartctl -i /dev/sda
これらのツールが見つからない場合は、次のパッケージをインストールしてください
# apt-get install hdparm
# apt-get install smartmontools
# apt-get install lshw
hdparm -I /dev/sd?
hdparm
パッケージをARM(Raspberry PiのRaspbian )にインストールする必要がありました。
hdparm -I /dev/sd? | grep --before-context=4 'Serial\ Number'
シリアル番号とデバイスを関連付けるために使用します。元の質問がその結果を要求しているようです。
デバイス1の名前と対応するシリアル番号:
lsblk --nodeps -o name,serial
出力:
NAME SERIAL
sda 0000000012400917BA30
sdb 0000000012400917BA96
-n
ヘッダー行を印刷したくない場合は追加します:
lsblk --nodeps -no name,serial
出力:
sda 0000000012400917BA30
sdb 0000000012400917BA96
device
特定のデバイスのシリアル番号のみを取得するには、引数として渡します。
lsblk --nodeps -no serial /dev/sda
出力:
0000000012400917BA30
lsblk
すべての使用可能な(または指定された)ブロックデバイスに関する情報をリストすることに注意してください。さて、最後の用語が何を意味するのか分からない人のために:
一般に、ブロックデバイスはデータを保存または保持するデバイスです。ディスケットドライブ、ハードドライブ、およびCD-ROMドライブはすべてブロックデバイスです。ただし、使用lsblk
する場合、たとえばtype
(デバイスタイプ)やtran
(デバイストランスポートタイプ)などの列を追加するだけで問題ありません。
lsblk --nodeps -no name、serial、type、tran
sda 0000000012400917BA30 disk sata
sdb 0000000012400917BA96 disk sata
sr0 4B583242334C453233353320 rom usb
lsblk
からのutil-linuxのバージョン2.24以上:github.com/karelzak/util-linux/commit/...
私が知っている最も簡単な方法(ルートは必要ありません):
inxi -Dplxx
これは、すべてのディスク、そのシリアル、および追加情報を出力します。-pはパーティションを追加します。-lはラベルを追加します。-uは、パーティションのUUIDを追加します。
それに、覚えやすいですよね。
サンプル:
inxi -Dxx
Drives: HDD Total Size: 810.2GB (42.9% used)
ID-1: /dev/sdc model: ST3160827AS size: 160.0GB serial: 5MT2HMH6
ID-2: /dev/sdb model: WDC_WD3200JD size: 320.1GB serial: WD-WCAMR1302926
ID-3: /dev/sda model: ST380817AS size: 80.0GB serial: 4MR2EWBE
ID-4: /dev/sdd model: ST3250824AS size: 250.1GB serial: 9ND08GKX
これにより、光学ドライブが除外されることに注意してください。光学データを表示するには:
inxi -Dxxd
Drives: HDD Total Size: 810.2GB (42.9% used)
ID-1: /dev/sdc model: ST3160827AS size: 160.0GB serial: 5MT2HMH6
ID-2: /dev/sdb model: WDC_WD3200JD size: 320.1GB serial: WD-WCAMR1302926
ID-3: /dev/sda model: ST380817AS size: 80.0GB serial: 4MR2EWBE
ID-4: /dev/sdd model: ST3250824AS size: 250.1GB serial: 9ND08GKX
Optical-1: /dev/sr0 model: LITE-ON DVDRW SOHW-1693S
rev: KS09 dev-links: dvd,dvdrw
Features: speed: 48x multisession: yes
audio: yes dvd: yes rw: cd-r,cd-rw,dvd-r state: running
Optical-2: /dev/sr1 model: LITE-ON LTR-52327S rev: QS0C dev-links: cdrom,cdrw
Features: speed: 52x multisession: yes
audio: yes dvd: no rw: cd-r,cd-rw state: running
私のDebianシステムでは、rootであろうとユーザーであろうと、lsblkはシリアルについて何も表示しないことに注意してください。そのため、inxiはより信頼性の高い方法を使用してそのデータを取得します。
lsblk --nodeps -o name,serial
NAME SERIAL
fd0
sda
sdb
sdc
sdd
sr0
sr1
lsblk --version
lsblk from util-linux 2.25.2
ご覧のとおり、lsblkにとっては、光学ドライブとフロッピードライブもディスクであると考えています。ディスクは挿入されるまでディスクにならないので、ある意味ではそうではありません。また、シリアルの場合は何も表示されません。また、ラベルなどの他の値の場合も表示されません。このデータはシステムで利用できるため、間違いなくバグであり、inxiが直接取得します。
lsblk
ディスクだとは思わず、単にすべてのブロックデバイスをリストします。明確化のために私の更新された投稿を参照してください。情報を表示しないことに関しては-これは、そのlsblk
振る舞いで有名なdebianを使用しているためです。それはarchlinuxで絶対に問題なく動作するので、間違いなくバグではありません。また、inxi
他のコマンドを使用してその情報を取得する単なるbashスクリプトです。「直接」何も取得しません。
lsblk --nodeps -o name,serial
、シリアル番号は表示されますが、バグを再現することはできません。
ls -l /dev/disk/by-id
使用可能な場合はディスクのWWNが表示されるため、使用することも好きです。通常、WWNはディスクのラベルに印刷されているため、簡単に識別できます。
root@server (16:27:58):~# ls -l /dev/disk/by-id
total 0
lrwxrwxrwx 1 root root 9 Dec 20 01:51 ata-Samsung_SSD_850_EVO_250GB_S3PZNF0JB57579N -> ../../sda
lrwxrwxrwx 1 root root 10 Dec 20 01:51 ata-Samsung_SSD_850_EVO_250GB_S3PZNF0JB57579N-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Dec 20 01:51 ata-Samsung_SSD_850_EVO_250GB_S3PZNF0JB57579N-part2 -> ../../sda2
...
lrwxrwxrwx 1 root root 9 Dec 20 01:51 wwn-0x50014ee25ffd0a5c -> ../../sdc
lrwxrwxrwx 1 root root 9 Dec 20 01:51 wwn-0x50014ee2b554c0b4 -> ../../sdb
lrwxrwxrwx 1 root root 9 Dec 20 01:51 wwn-0x5002538d427700f0 -> ../../sda
ls -al /dev/disk/by-id/ | grep sdX | grep wwn | awk '{print $9'}
これによりwwn-id
、ディスクが表示されます。awk
フィルタは、OSディストリビューションおよびバージョンに応じて調整する必要があるかもしれません。を読むにはwwn-id
、Pacemakerディスクフェンシングに必要なスクリプト化されたソリューションが必要でした。パーティション(/dev/sdX1
例)がすでに作成されている場合grep
、出力をフィルタリングするには別のパーティションが必要です:
ls -al /dev/disk/by-id/ | grep sdX | grep wwn | grep -v sdX1 | awk '{print $9'}