我的 Ubuntu 16.04 MythTV 盒子有两个硬盘 sda 和 sdb,分别连接到 SATA1 和 SATA2 接口。它们有分区 sda1、sda2 和 sdb1、sdb2 等。我正在安装一个 240GB 的 SDD,研究过这个问题后,我预计当连接到 SATA3 时它会是 sdc。出于某种原因,gparted 将其视为 sdb,而 sdb 现在是 sdc,因此所有分区名称都是错误的。例如,sdc 有分区 sdb1、sdb2 等。
目的是将除用于 MythTV 录制的两个 1GB 分区之外的所有内容移至 SDD,每个 HDD 上一个分区。理想情况下,sda 应为 SATA1 上的 SDD,当前 sda 应成为 SATA2 上的 sdb,当前 sdb 应成为 SATA3 上的 sdc,所有分区均应正确命名。
那么仅有几个问题:-
这是一个合理的目标吗?无需重新安装就能实现吗?如何实现?
是否最好以某种方式强制将 SDD 命名为“sdc”,以便可以更合适地命名分区?
分区名称与所在磁盘不匹配是否会导致操作系统开销或其他问题(除了混淆)?
分区名称是否必须在整个系统范围内唯一或仅对每个磁盘唯一,即,您是否可以通过包含磁盘名称(例如 /dev/sda/sdb4)来引用它?
我确信这里可能还有其他一些问题,但我现在想不起来任何问题。
答案1
简短的回答是“不再如此”。我认为在 16.04 左右,udev
指定存储设备的规则就/dev/sdX
消失了。您可以用于udev
创建具有预定义名称的附加符号链接,但/dev/sdX
(还有一些其他)属于内核的管辖范围。
内核根据设备被发现的顺序来命名设备。启动驱动器总是会首先被发现,因此,如果它位于分配了字母的总线上/dev/sdX
,则将X
始终为a
。如果 SSD 在启动期间对探测命令的响应速度比 HDD 快,那么它可能总是被分配,然后是响应较慢的设备。如果 SSD 和 HDD 的响应时间非常接近且由于某种原因而波动,您可能会看到它们在不同的启动中交换分配。
出于这样的原因,我们通常使用带有 UUID 的挂载点,这样一切通常都能“正常工作”,我们不必摆弄设置或fstab
频繁修改
答案2
分区名称在整个系统内都是唯一的,不能有两个分区相同,否则会遇到大问题。如果不检查物理位置,您将陷入无法知道当时安装了哪个分区的境地。它可能会在不同启动之间发生变化,因为这取决于系统首先看到哪个驱动器才能将其安装。这就是为什么它出现在SSD
另一个/dev/sdb
驱动器之前,或者它在第二个旋转器之前排队的控制器通道上的原因,结果是一样的,它首先被看到,因此获得下一个排队的驱动器号进行分配。为了确保以可预测的方式执行此操作,可以在安装时使用PARTUUID
或,以防止驱动器号更改对您造成的混淆。要查找所需信息,以 root 身份或使用 sudo 使用该命令。LABEL
/etc/fstab
blkid
root@buster-raspi:~# blkid
/dev/mmcblk1: PTUUID="8ed03b0d" PTTYPE="dos"
/dev/mmcblk1p1: SEC_TYPE="msdos" LABEL_FATBOOT="RASPIFIRM" LABEL="RASPIFIRM" UUID="AC25-5007" TYPE="vfat" PARTUUID="8ed03b0d-01"
/dev/mmcblk1p2: LABEL="RASPIROOT" UUID="cce1d06d-e567-4b48-a624-e823b516507f" TYPE="ext4" PARTUUID="8ed03b0d-02"
/dev/sda1: SEC_TYPE="msdos" UUID="3651-174E" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="9fad4e77-177d-4a3c-929a-3897e6bc1810"
/dev/sda2: UUID="4a349c2c-0df5-4fdb-a99f-906423554de9" TYPE="ext4" PARTUUID="59097f66-f9fb-4a50-a491-8a71becaa2bd"
我在下面向您展示了我的 Pi 4 输出/etc/fstab
。
root@buster-raspi:~# cat /etc/fstab
# The root file system has fs_passno=1 as per fstab(5) for automatic fsck.
#LABEL=RASPIROOT / ext4 rw 0 1
PARTUUID=59097f66-f9fb-4a50-a491-8a71becaa2bd / ext4 rw 0 1
# All other file systems have fs_passno=2 as per fstab(5) for automatic fsck.
LABEL=RASPIFIRM /boot/firmware vfat rw 0 2
在该文件中,您可以看到它是如何安装的,用于LABEL=RASPIFIRM
机器的启动和系统PARTUUID=59097f66-f9fb-4a50-a491-8a71becaa2bd / ext4 rw 0 1
的/
,我从注释掉的#LABEL=RASPIROOT
分区复制了这些文件,以便从而SSD
不是它们所在的 SD 卡上加载文件。
此方法可确保您获得一个始终可靠的文件系统名称,以便在启动时挂载。除非您格式化分区或手动更改,否则这些名称永远不会改变LABEL
。这两种行为都是对用户的故意行为,用户应该知道,现在需要进行更改才能再次启动。
为了再次启动而不重新安装,您需要复制当前驱动器上的文件/
。完成此操作后,如果BIOS
启动,则GRUB
使用重新检查方法安装到新驱动器,以确保找到新安装。然后,您启动该安装并擦除旧驱动器,然后GRUB
再次执行此操作以消除擦除后找不到它的错误。GRUB
太棒了,如果没有非相关操作系统,它将拒绝尝试启动。直到通过重新安装删除该条目,启动才会失败,即使该操作系统与启动您想要的操作系统无关。如果系统(EFI
我认为您似乎没有),您需要将/dev/sda1
驱动器开头的小文件复制到新驱动器上的相应分区,然后重新进行GRUB
双重安装。您可以在我使用的/dev/sda1
驱动器的上方输出中看到此分区SSD
,因为它被分区GPT
为使用该方法启动的要求EFI
。我想我已经为您讲完了。在写这篇文章时被上面的海报打败了,我还是会把它留下。