终端的硬盘序列号?


64

我有多个连接到服务器的硬盘,但不确定sdXY哪个硬盘。如果从终端可以看到硬盘的序列号,则可以轻松识别它们。

我有什么办法可以从终端上看到它们?

Answers:


56

不需要root特权的另一个解决方案:

udevadm info --query=all --name=/dev/sda | grep ID_SERIAL

这实际上是lsblkdon_crissti提到的利用的库,但是我的lsblk版本不包含用于串行的选项。


2
最好的解决方案,如果您的硬盘完全耗尽。其他方法无效。
niieani

1
grep ID_SCSI_SERIAL可能是实际提供驱动器序列号的原因,而不是根据所报告的全球通用名称(wwn)ID_SERIAL
罗恩

@ron有趣!您是否有定义wwn的引用?
约翰·

唯一的参考是我对WD,Seagate,HGST硬盘驱动器的第一手经验,将终端上的值与标签上的内容进行比较。硬盘驱动器主要是企业级/数据中心级,而不是消费级台式机。
罗恩

1
@ron刚刚再次测试。我的udevadm版本(系统229)报告ID_WWN字段。对于我系统中的驱动器,也没有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
Johann

50

在终端类型中:

# hdparm -I /dev/sd? | grep 'Serial\ Number'

编辑:您也可以使用lshwsmartctl

  • sh

    # lshw -class disk

  • Smartctl

    # smartctl -i /dev/sda

如果您缺少这些工具,则只需安装以下软件包

# apt-get install hdparm
# apt-get install smartmontools
# apt-get install lshw

感谢您的回答,我已经对其进行了测试。但是它没有给出dev / sdXX。请尝试修复它。除非其良好
rɑːdʒɑ

如果您删除“ grep”部分,则将获得完整的信息,如hdparm -I /dev/sd?
Loopo 2016年

3
如果您的硬盘已完全耗尽,并且您正在寻找故障设备的序列号,则该方法不起作用。请改用@Johann方法。
niieani

我必须hdparm在ARM(Raspberry Pi上的Raspbian )上安装(恰当命名的)软件包。
EthernetCable

用于hdparm -I /dev/sd? | grep --before-context=4 'Serial\ Number'将序列号与设备关联。看起来像是原始问题的请求结果。
s.co.tt

31

设备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

10
请注意,这似乎需要lsblk从UTIL-Linux版本2.24或更高版本:github.com/karelzak/util-linux/commit/...
约翰

使用VM Ubuntu时如何检索硬盘串行?上面的命令在这种情况下不返回任何内容
Benyamin Jafari,

11

通过使用,hdparm 您可以从终端查看硬盘序列号。

打开您的终端并输入

 hdparm -I /dev/sd?|grep -E "Number|/dev"

是的,但是您需要成为超级用户才能使用中的-I选项hdparm。我也不想这样做,而是希望有一种方法在没有 root权限的情况下读出ser#。这就是为什么我只赞成don_crissti的解决方案。–语法错误57秒前
语法错误

9
$ ls -al /dev/disk/by-id/*sda*

这将根据您熟悉的磁盘名称显示序列号。


这是一个聪明的方法,但不适用于我的虚拟盒子。看起来by-id目录的内容只是符号链接,因此ls -al /dev/disk/by-id/无论如何都会向您显示所需的内容。
2015年

1
这在debian实时启动系统上也对我有用,而所有其他工具都无法从头开始使用,如果没有设置Internet并易于获得它们的话。
hoijui

3

我知道的最简单方法(不需要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直接获得它的地方。


2
您文章的最后一部分是错误的,lsblk不认为它们是磁盘,它只是列出了所有块设备。请参阅我更新的帖子以进行澄清。至于不显示信息-这是因为您使用的是notorius的debian lsblk行为。它在archlinux上绝对可以正常工作,因此绝对不是bug。另外,inxi这只是一个bash脚本,它使用其他命令来获取该信息。它没有“直接”获得任何东西。
don_crissti

从技术上讲是正确的,但在普通语音领域,磁盘是传达此概念的一种不错的方式。行为失败当然是一个错误,与造成错误的原因无关,因此,您认为错误的lsblk不是错误的说法基本上没有任何意义。该错误是否是由debian创建的,都不会改变它是一个错误的事实。直接表示无需中介,即从文件系统获取信息,inxi在此获取串行信息。答案应该反映出整个gnu / linux的情况,因此说lsblk可以工作,但debian / buntu除外,因为没有价值,因为大多数用户会发现它不起作用。
Lizardx

答案的这一部分是错误的:lsblk,它认为光盘驱动器和软盘驱动器也是磁盘。实际上,lsblk列出了阻止设备(包括硬盘,SSD,软盘驱动器,光盘驱动器,LVM逻辑卷等),而lsblk不会区分磁盘和非磁盘。

仅供参考,在Debian Buster上,lsblk --nodeps -o name,serial确实显示了序列号,但我无法重现该错误。

lsblk正在改善,但是仍然存在一些细微的问题,我仍然不会将其用作我制作的工具的主要数据源,但是现在我将其用作辅助数据源,但是我们已经遇到了无法解释的错误使用它,现在就开始工作。
Lizardx

1

我也喜欢使用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

1
ls -al /dev/disk/by-id/ | grep sdX | grep wwn | awk '{print $9'}

这将显示wwn-id磁盘的。该awk过滤器可能需要根据操作系统发行版和版本进行调整。我需要一个脚本化的解决方案来读取wwn-idPacemaker磁盘防护所需的。如果/dev/sdX1已经创建了分区(例如),grep则需要另一个分区来过滤输出:

ls -al /dev/disk/by-id/ | grep sdX | grep wwn | grep -v sdX1 | awk '{print $9'}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.