我有一台运行软件 raid 的 CentOS 4.x 服务器。该服务器在热插拔托盘中有两个 scsi 磁盘。mdadm 报告 raid 已发生故障,因此我想更换它。
我检查了 /proc/mdstat,它告诉我我的两个 raid 设备在磁盘 sda 和 sdb 上有组件。它还告诉我 sdb 是发生故障的那个。
我检查 /proc/scsi/scsi,它告诉我有两个物理设备,SCSI ID 分别为 0 0 0 0 和 0-0-1-0。
因为我想进行热更改,所以我假设 sdb 是 0-0-1-0。所以我说:
# echo "scsi remove-single-device 0 0 1 0" > /proc/scsi/scsi
...并且计算机出现故障,因为 sda 刚刚被移除,导致系统没有有效的驱动器。
现在回想起来,我之所以陷入这种困境,是因为上次驱动器发生故障时,它是 sda/0-0-0-0,而我采用的是老派方法 —— 停止计算机,移除坏掉的驱动器,然后从旧插槽中幸存的驱动器启动。这让我的计算机认为 sda 是 0-0-1-0。然后我获取并插入了热替换件,并按如下方式添加它:
# echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi
...成功了,这意味着我可以应用磁盘标签、分区并重建我的 RAID 阵列。这也意味着计算机认为 sdb 是 0-0-0-0。现在 sdb 又死机了(350 天后,但那是另一个问题),我已经忘记了这一切。
那么。假设我的记忆力和记录能力不足以提醒我发生过这种情况,将来我能否比较 scsi 设备名称 (0-0-$n-0) 并将它们与命名设备 (sd$x) 关联起来?
答案1
您可以查看/sys/block/sda/device, which will have a symlink starting with
scsi_device
that identifies the device:
$ ls -d /sys/block/sda/device/scsi_device*
/sys/block/sda/device/scsi_device:0:0:0:0
Or you can look in /sys/bus/scsi/devices:
$ ls /sys/bus/scsi/devices/
0:0:0:0 1:0:0:0 2:0:0:0 3:0:0:0 7:0:0:0 8:0:0:0
Each entry here represents a SCSI device. Inside each directory is a symlink starting with block:
that identifies the corresponding block device:
$ ls -d /sys/bus/scsi/devices/0\:0\:0\:0/block*
/sys/bus/scsi/devices/0:0:0:0/block:sda