Answers:
不需要root特权的另一个解决方案:
udevadm info --query=all --name=/dev/sda | grep ID_SERIAL
这实际上是lsblk
don_crissti提到的利用的库,但是我的lsblk版本不包含用于串行的选项。
grep ID_SCSI_SERIAL
可能是实际提供驱动器序列号的原因,而不是根据所报告的全球通用名称(wwn)ID_SERIAL
。
ID_SCSI_SERIAL
也没有类似的东西(否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
sh
# 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-无名称,序列号,类型,tran
sda 0000000012400917BA30 disk sata
sdb 0000000012400917BA96 disk sata
sr0 4B583242334C453233353320 rom usb
lsblk
从UTIL-Linux版本2.24或更高版本:github.com/karelzak/util-linux/commit/...
我知道的最简单方法(不需要root):
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
不认为它们是磁盘,它只是列出了所有块设备。请参阅我更新的帖子以进行澄清。至于不显示信息-这是因为您使用的是notorius的debian lsblk
行为。它在archlinux上绝对可以正常工作,因此绝对不是bug。另外,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