如果没有相关知识,我通常会认为 SATA、SCSI 和 USB 海量存储由不同的驱动程序驱动。然而在 Linux 中,SCSI 子系统驱动所有这些。
为什么 Linux 使用 SCSI 子系统来驱动与 SCSI 没有明确关系的东西?为什么 NVMe 和(历史上)PATA 不支持 SCSI 子系统的一部分?
我有一台运行软件 raid 的 CentOS 4.x 服务器。服务器在热插拔托盘中有两个 scsi 磁盘。mdadm 报告突袭失败,所以我想更换它。
我检查了 /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
Run Code Online (Sandbox Code Playgroud)
...并且计算机会出现故障,因为 sda 刚刚被删除,使系统没有有效的驱动器。
现在回想起来,我陷入这种混乱的方式是最后一次驱动器出现故障,它是 sda/0-0-0-0,我用老派的方式做到了——停止计算机,移除死驱动器,然后从幸存者的旧插槽中启动。这给我留下了一台认为 sda 是 0-0-1-0 的计算机。然后我获取并插入,热的,一个替代品,然后像这样添加它:
# echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi
Run Code Online (Sandbox Code Playgroud)
...这是有效的,这意味着我可以应用磁盘标签、分区和重建我的 RAID 阵列。这也意味着计算机认为 sdb 是 0-0-0-0。现在 sdb 又死了(350 天后,但这是另一个问题),我已经忘记了这一切。
所以。假设我的记忆和我的记录保存技能都不足以提醒我这已经发生了,有没有办法在将来比较 scsi 设备名称 (0-0-$n-0) 并将它们与命名设备相关联(sd$x)?
我遇到过像 SATA、SCSI 和 SSD 这样的术语。有人可以根据他们的技术,更重要的是应用程序和行业趋势详细说明这些术语之间的区别吗?