该盒子是一台 HP 微型服务器,运行 Ubuntu 16.04。我最近将启动设备“升级”为 64GB SSD。此外还有一个 1TB SATA 驱动器。
/dev/sda1
通常它会作为主分区(在 SSD 上)和/dev/sda5
交换分区启动,并/dev/sdb1
指向 1Tb HDD 上的分区,该分区安装到/mnt/media0
.
问题是,它有时会改变这一切,SSD现在是/dev/sdb1
,/dev/sdb5
媒体分区现在是/dev/sda1
。
/etc/fstab
当然,这会导致交换和介质安装失败,因为它们使用以前的名称列出/dev/sd*
。
所以我有:
检查了 BIOS,它始终将 64GB SSD 列为第一个驱动器,将 1TB IDE 列为第二个驱动器。
我尝试更改
/etc/fstab
为按卷标引用媒体驱动器,但这会导致 Ubuntu 启动失败并使我进入恢复模式。我尝试更改
/etc/fstab
为使用 UUID 引用交换和 (ext4) 媒体分区(事实上,它列出了主分区)但然后我遇到了第二个问题。
当我执行以下命令查找各个分区的 UUID 时...
ls /dev/disk/by-uuid
blkid
两者都只列出第 1 个条目——主分区的 UUID。我只能看到媒体分区的 UUID 使用(在启动时,事实上,sdb1
明显被分配)
tune2fs -l /dev/sdb1
但同样,如果我使用该 UUID,/etc/fstab
那么 Ubuntu 将无法启动并进入恢复模式。
所以,我的问题是:
有什么方法可以获取
/dev/sda
和/dev/sdb
停止驱动器之间的交换吗?如何让系统查看其他分区的 UUID,以便我可以在其中使用它们
fstab
?和/或有没有其他方法可以可靠地安装我的交换和媒体分区?
答案1
您可以在 中使用“disk/by-id”名称/etc/fstab
,请参阅
ls -l /dev/disk/by-id
请注意,这些设备名称也可能在其他文件(initrd、grub 配置)中使用。因此,您也可以更新 grub 配置并重新创建 initrd。
答案2
它不断交换硬盘驱动器,因为不同的内核有 udev 支持,而其他内核没有 udev (eudev) 支持!
是的,当我开始尝试 sysv、openrc 和 s6 init 替换(systemd 替换)时,我也被这个问题困扰了。
问题在于 grub 实用程序及其在同一磁盘中构建不同 Linux vmlinuz 映像时的配置文件,特别是在为一个内核构建而不是其他内核构建启用GRUB_DISABLE_LINUX_UUID
(/etc/default/grub
等)时。
==原因#1==
那么……罪魁祸首是谁?较旧的非 systemd。非 systemd 会进行交换,使 sda 驱动器始终成为起始磁盘标签,无论使用哪个 SATA/IDE 连接器。
驱动器排序由 ATA(SATA 或 libata 库)设备完成,重新排序由drivers/scsi/ida_probe()
.GRUB_DEVICE_BOOT
从您的文件中删除它/etc/default/grub
。
==原因#2==
指定CONFIG_SCSI_DEBUG
为“yes”(如果在 vmlinuz 引导参数中使用带“的 initramfs”,则指定为“m” scsi_debug=add_host:1
)绝对会将现有硬盘驱动器的“sd”标签索引的索引号推高一:即,您的sda1
变为sdb1
.