如何将/ dev / sd设备与它们代表的硬件相关联?


35

驱动器开始出现故障,我仅通过/dev/sdb设备文件名称知道该设备。我可以使用哪些方式将该设备文件与实际的硬件设备相关联,从而知道要物理替换哪个驱动器?

奖励:如果我没有/dev/disk/此安装及其子目录,该怎么办?(可惜的是,我没有)


没有RAID控制器?
ewwhite 2012年

@ewwhite不是出于这个问题的目的,不是。=)
韦斯利

顺便说一句 如果您没有/dev/disk/目录,则可能没有udev。
Ulrich Dangel 2012年

@UlrichDangel非常细心,因为...我没有udev。=(
韦斯利2012年

Answers:


21

您可以查看/sys/block

-bash-3.2$ ls -ld /sys/block/sd*/device
lrwxrwxrwx 1 root root 0 Jun  8 21:09 /sys/block/sda/device -> ../../devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0
lrwxrwxrwx 1 root root 0 Jun  8 21:10 /sys/block/sdb/device -> ../../devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0
lrwxrwxrwx 1 root root 0 Jun  8 21:10 /sys/block/sdc/device -> ../../devices/pci0000:00/0000:00:1f.2/host2/target2:0:0/2:0:0:0
lrwxrwxrwx 1 root root 0 Jun  8 21:10 /sys/block/sdd/device -> ../../devices/pci0000:00/0000:00:1f.2/host3/target3:0:0/3:0:0:0

或者,如果没有/sys,则可以查看/proc/scsi/scsi

-bash-3.2$ cat /proc/scsi/scsi 
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi3 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST31000340AS     Rev: SD1A
  Type:   Direct-Access                    ANSI SCSI revision: 05
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: PepperC  Model: Virtual Disc 1   Rev: 0.01
  Type:   CD-ROM                           ANSI SCSI revision: 03

太棒了,我在那里/sys/(还有/proc/)很多很棒的信息。仍在消费。
韦斯利2012年

另外,看看/ dev / disk / by-path(假设您的udev支持它)。当然,OP不会,所以
derobert 2012年

14
hdparm -i /dev/sdb

这应该为您提供驱动器的型号和序列号。


我认为,这将适用于大多数情况。但是,由于某些原因,该服务器中的控制器是粗略的。执行该命令可为我带来以下收益:HDIO_GET_IDENTITY failed: Invalid argument
韦斯利(Wesley)2012年

1
smartctl -i也值得尝试。可在SCSI驱动器上工作,而hdparm通常不会。
derobert

不带USB drices工作
的Mads Skjern

12

正如吉尔斯在他的回答中提到的那样,如果您的内核使用了内核,则udev可以使用以下udevadm命令来查询设备:

udevadm info -n /dev/sda -a

(可悲的是,在某些情况下[令人遗憾的是,在这种情况下对我而言这是真的]不使用udev和/或udevadm不可用。)


8

如果您可以看到驱动器上的LED指示灯或听磁盘噪音,则可以运行

sudo cat /dev/sdb >/dev/null

并查看哪个驱动器突然变得连续活动。或者,如果您吵闹,

sudo find /mount/point >/dev/null

这将使磁头移动得更多(最好不要在发生故障的磁盘上执行此操作,而应使用其他磁盘上的消除方法)。


2
我已经考虑过如何使灯光闪烁,这就是我的好奇心的答案。=)
韦斯利2012年

1
一些驱动器为此配备了一个额外的LED,但通常仅在企业级驱动器中才能找到(容量相对较低时,价格昂贵)。不知道如何工作这些LED,但是这种dd技巧通常效果很好。
jippie 2012年

@WesleyDavid即使没有LED,收听噪音也可能是最后的解决方法。不需要在dd这里使用(也不是在大多数情况下),cat否则从文件读取的任何其他程序都可以使用。
吉尔(Gilles)'所以


4

我有4种方法。第一个是最简单的:

dmesg | egrep "sd[a-z]"

对于其他人,我不知道他们是否需要/ dev / disk,除了这个:

ls -lF /dev/disk/by-uuid

其他:

blkid -o list -c /dev/null

显而易见的是:

fdisk -l

3

我知道一些找到SCSI设备名称的方法

  • dmesg | egrep "sd[a-z]"
  • lsblk --scsi (从util-linux> = v2.22包开始)
  • lshw -C disk
  • ls -ld /sys/block/sd*/device
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.