确保 USB 磁盘不是 sda,即使从其启动

确保 USB 磁盘不是 sda,即使从其启动

一些背景...

我认为这应该是一个一般的 Linux 内核(或内核模块)相关的问题,尽管我在预先植入 Debian 进行自动安装时遇到了这个问题。

每次我从 USB 磁盘启动安装程序时,USB 磁盘都会变成 /dev/sda,但我使用的预置文件假设第一个硬盘(本例中为 sata)应该是 /dev/sda。我使用相同的系统进行 pxe 网络安装,我希望保持它们一致。我还担心,如果我编写了一个预置配置,假设第一个磁盘是 sdb,那么出于某种原因,它可能在某个时候不是这样。

我尝试编写 udev 规则,将 USB 磁盘的设备名称更改为“INSTALLMEDIA”,这似乎有效,但是它不会导致 SATA 磁盘从 sda 启动,它们仍然从 sdb 启动。

我的问题...

什么决定了磁盘的发现和命名顺序?

如果有的话我能做什么来控制它?

如果我无法采取任何措施来控制它,那么从 USB 启动时是否可以安全地假设 USB 磁盘或多或少可以保证是 sda 而第一个 SATA 磁盘始终是 sdb?

答案1

据我所知,这个问题最可靠的答案是使用 udev 可以为您创建的较新的符号链接。Udev 枚举磁盘驱动器,并创建几棵包含设备的树 - 向您解释它们是什么类型的设备。

它位于 /dev/disk。

你有,顺便说一下:

/dev/disk/by-path/pci-0000:00:1a.0-usb-0:1.5:1.0-scsi-0:0:0:0-part1
/dev/disk/by-path/pci-0000:00:1a.0-usb-0:1.5:1.0-scsi-0:0:0:0
/dev/disk/by-path/pci-0000:06:00.0-scsi-0:0:0:0
/dev/disk/by-path/pci-0000:00:1f.2-scsi-1:0:0:0-part2
/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0-part2
/dev/disk/by-path/pci-0000:00:1f.2-scsi-1:0:0:0-part1
/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0-part1
/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0
/dev/disk/by-path/pci-0000:00:1f.2-scsi-1:0:0:0

例如,它可以清楚地告诉您该设备是否是 USB 设备。

答案2

另一种选择是,如果你能在实际需要访问设备之前运行某种脚本,那么你可以创建自己的符号链接(甚至是设备文件)。比如

#!/bin/sh
for i in  /dev/sd? ; do 
  if detect installation drive somehow ; then ln -s $i /dev/install ; fi ; 
done ;

作为最后的解决方案,您可以“交换” /dev 中的 sda、sdb……设备文件,但我会尽量避免使用这种解决方案,因为它可能会引入很多新问题。

相关内容