编辑:我想我解决了我自己的问题--详情请看问题的底部。
我有一个/下的所有文件在一个外部usb连接的硬盘上的副本.为了测试此备份是否有效,我正在尝试从它启动。然而,事实证明,这比我预期的要困难一些。
(hd2,gpt1),但是在外部驱动器上安装GRUB之后,它就变成了(hd0,gpt2)。linux /boot/vmlinuz-linux root=/dev/sda2之后启动时,总是会遇到一些与指定为root的驱动器相关的失败。甚至当我通过设备uuid指定根时也会发生这种情况。我的问题是,我需要担心吗?/etc/fstab?这是我需要改变的东西,以确保找到根吗?无论我是在内部驱动器上还是在外部驱动器上更改/etc/fstab文件,这都是重要的。(我确实修改了外部驱动器上的/etc/fstab,以便将带有根分区UUID的驱动器挂载到/,但没有效果)usb 2-4: device descriptor read/64, error -71,但是由于这对驱动器的功能没有明显的影响,所以我忽略了它。这个错误也出现在两个独立的外部HD端口上,所以我假设它不是硬件问题。澄清:
我使用博格创建了我的外部备份,它创建了所有文件的副本。它不像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。然而,这两种方法都不起作用,而且都把我扔进了一个奇怪的命令行。我发现带有正确UUID的分区实际上是出于某种原因被挂载到/dev/sdb2的!使用root=/dev/sdb2,我可以很好地引导系统。我认为我以前通过指定UUID来引导的尝试失败了,原因有一个(GRUB没有安装,UUID中的输入等等)。
这太不靠谱了。我仍然对最初的问题感到好奇--即,当安装了GRUB的多个驱动器时,如何决定使用哪个GRUB ? 2. /etc/fstab在引导过程中扮演的角色,还是不相关?--我将为这些问题的答案授予赏金。
发布于 2018-11-27 18:37:49
您的问题是root=/dev/sda2,因为这是通过device name进行挂载,这并不是唯一的。如果您只安装了一个驱动器,那么通常都会显示为/dev/sda,所以没有问题。但是,除了安装第二个磁盘或任何其他以/dev/sd?形式显示的东西外,也不能保证任何事情的顺序,而且通常情况下,sda会被移到sdb.很快就会变得乱七八糟的。
最好通过设备-id或-uuid安装,这将是唯一的。
在/dev/disk/下面,您将看到以下文件夹
例如,在by-id/下,您将看到链接,如
这里是我的/etc/fstab,它安装by device-id给您一个想法,我删除了额外的行,以保持它的重点。我使用EFI而不是GRUB,但是原理是相同的,只是对Grub更详细一些,{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注:这就是我在SLES11.4中看到的。当我使用EFI时,您需要在GRUB或GRUB2中找到特定的项并进行修改。这里的示例是我的/boot/efi/efi/SuSE/elilo.conf文件,请注意root=部分。在您的GRUB中,您想要修改的内容是by device-id或by uuid。别忘了用一种独特的方法(也可以是/etc/fstab或by-uuid )修改by-id。
# 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。
发布于 2018-11-27 19:05:51
这应该能回答你的问题:
https://unix.stackexchange.com/questions/483888
复制相似问题