编辑:我想我解决了我自己的问题 - 有关详细信息,请参阅问题底部
/
我在外部 USB 连接硬盘上有所有文件的副本。为了测试此备份是否有效,我尝试从它启动。然而,事实证明这比我预期的要困难一些。
在我假设的 BIOS 中,我选择外部 HD 作为启动设备。但是,无论我选择此设备还是我常用的驱动器作为引导设备,都会显示相同的 GRUB 菜单。无论我是否手动在外部硬盘上安装 GRUB,都会发生这种情况。所以我的问题是,GRUB 是从我的正常启动驱动器还是从外部驱动器加载,这有关系吗?
- 我发现在外部驱动器上未安装 GRUB 的情况下使用 GRUB 命令行时,外部驱动器显示为
(hd2,gpt1)
,但是在外部驱动器上安装 GRUB 后,它显示为(hd0,gpt2)
。
- 我发现在外部驱动器上未安装 GRUB 的情况下使用 GRUB 命令行时,外部驱动器显示为
也许我遇到的困难与我的第一个问题有关,但是当我在指定后启动时,我总是会遇到一些与指定为未找到的
linux /boot/vmlinuz-linux root=/dev/sda2
驱动器相关的故障。root
即使我通过设备 uuid 指定 root,也会发生这种情况。我的问题是,我需要担心/etc/fstab
?为了确保找到根目录,我是否需要更改此内容?我更改/etc/fstab
内部驱动器上的文件还是外部驱动器上的文件有关系吗?(我确实在外部驱动器上进行了修改/etc/fstab
,以便将具有根分区UUID的驱动器挂载到/
,但没有效果)也许因为它是一个USB连接的外部硬盘,我需要做一些特别的事情吗?我注意到正常启动时出现错误
usb 2-4: device descriptor read/64, error -71
,但由于这对驱动器的功能没有明显影响,因此我忽略了它。此错误也出现在两个独立的外部高清坞站上,因此我认为这不是硬件问题。
澄清:
我使用以下命令创建了外部备份博格,这会创建所有文件的副本。它不会像 那样复制整个磁盘dd
,因此例如在安装 grub 时我仍然需要手动创建带有该bios_grub
标志的分区。
我在尝试引导时在 grub 中使用的确切命令是
set root=(hd0,gpt2)
linux vmlinuz-linux root=/dev/sda2
initrd initramfs-linux.img
boot
我已经成功启动了。
我已经尝试了这两种方法linux /boot/vmlinuz-linux root=/dev/sda2
,但linux /boot/vmlinuz-linux root=/dev/sdc2
都无济于事——第一个是因为驱动器在 grub 中显示(hd0,gpt2)
,第二个是因为分区被标记为/dev/sdc2
我正常启动时的状态。然而,这些都不起作用,并且都让我进入了一个奇怪的命令行。我发现/dev/sdb2
由于某种原因实际上安装了具有正确 UUID 的分区!使用root=/dev/sdb2
我很好地启动了系统。我认为我之前通过指定 UUID 进行引导的尝试由于多种原因之一而失败(未安装 GRUB、UUID 中的拼写错误等)。
这实在是太虎头蛇尾了。我仍然对我最初的问题感到好奇——即,1.当有多个驱动器安装了GRUB时,如何决定使用哪个GRUB?2.在启动过程中确实/etc/fstab
起作用,还是无关紧要? ——我将悬赏回答这些问题。
答案1
你的问题是因为那是通过它root=/dev/sda2
进行安装device name
不独特。如果您只安装了一个驱动器,那么通常总是显示为/dev/sda
没有问题。但是安装第二个磁盘或任何其他显示的东西,因为/dev/sd?
这样就不能保证任何东西的顺序,而且通常被sda
移动到的东西sdb
......可能会很快变得混乱并失败。
最好通过安装通过设备 ID或者按-uuid这将是独一无二的。
在下面/dev/disk/
你会看到类似的文件夹
- 按 ID/
- 按标签/
- 旁路/
- 通过-uuid/
例如,在下面by-id/
您将看到诸如以下的链接
这是我的/etc/fstab
安装座,by device-id
可以给您一个想法,我删除了多余的线条以保持其正确性。我使用 EFI 而不是 GRUB,但原理是一样的,只是用 Grub 更详细{grub 统一引导加载程序中的重要部分}:
/dev/disk/by-id/scsi-35000cca070168a20-part2 / ext3 acl,user_xattr 1 1
/dev/disk/by-id/scsi-35000cca070168a20-part1 /boot/efi vfat umask=0002,utf8=true 0 0
/dev/disk/by-id/scsi-36003048018e26e011d81ba1714e4c99f-part1 /data xfs defaults 1 0
/dev/disk/by-id/scsi-36003048018fa44011d57b61bbe1b8533-part1 /scratch xfs defaults 1 0
/dev/disk/by-id/scsi-36003048018e266011d81ba7e1afeadf6-part1 /bkup xfs defaults 1 2
注意:这是我在 SLES 11.4 中看到的。当我使用EFI时,您需要找到GRUB或GRUB2中的特定项并进行修改。作为示例,这里是我的/boot/efi/efi/SuSE/elilo.conf
文件,请注意该root=
部分。您想要将 GRUB 中与此相对应的内容修改为by device-id
或by uuid
。并且不要忘记/etc/fstab
通过唯一方法修改为by-id
或by-uuid
。
# This file has been transformed by /sbin/elilo.
# Please do NOT edit here -- edit /etc/elilo.conf instead!
# Otherwise your changes will be lost e.g. during kernel-update.
#
# Modified by YaST2. Last modification on Mon Oct 15 11:04:42 EDT 2018
timeout = 80
##YaST - boot_efilabel = "SUSE Linux Enterprise Server 11 SP4"
default = SLES11_SP4_16
prompt
image = vmlinuz-3.0.101-108.77-default
###Don't change this comment - YaST2 identifier: Original name: linux###
label = SLES11_SP4_16
append = "splash=verbose showopts "
initrd = initrd-3.0.101-108.77-default
root = /dev/disk/by-id/scsi-35000cca070168a20-part2
image = vmlinuz-3.0.101-108.77-default
###Don't change this comment - YaST2 identifier: Original name: failsafe###
label = Failsafe_15
append = "showopts ide=nodma apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe "
description = "Failsafe (3.0.101-108.77-default)"
initrd = initrd-3.0.101-108.77-default
root = /dev/disk/by-id/scsi-35000cca070168a20-part2
你不想要boot=/dev/sd?
或root=/dev/sd?
任何地方,?
无论字母在哪里。从/dev/disk/by-id
或中引用磁盘/dev/disk/by-uuid
;by-label
如果您设置分区标签并相信它们是唯一的,您甚至可以使用。
答案2
这应该可以回答您的问题:
通常,所使用的 GRUB 是 BIOS 最先看到的磁盘上的GRUB 或在 BIOS 中选择首先运行的GRUB。因为驱动器的 MBR 指向加载的 GRUB。
/etc/fstab 只负责自动执行挂载、分区过程。在窗帘情况下,您可以完全绕过 fstab。