首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用grub从外部备份驱动器正确引导

使用grub从外部备份驱动器正确引导
EN

Unix & Linux用户
提问于 2018-11-24 16:22:27
回答 2查看 4.1K关注 0票数 1

编辑:我想我解决了我自己的问题--详情请看问题的底部。

我有一个/下的所有文件在一个外部usb连接的硬盘上的副本.为了测试此备份是否有效,我正在尝试从它启动。然而,事实证明,这比我预期的要困难一些。

  1. 在我假设的BIOS中,我选择外部HD作为启动设备。但是,无论我选择这个设备还是我通常的驱动器作为启动设备,我都会看到相同的GRUB菜单。无论我是否手动在外部HD上安装GRUB,都会发生这种情况。所以我的问题是,GRUB是从我的正常引导驱动器还是从外部驱动器加载的,这重要吗?
    • 我发现,在使用GRUB命令行时,在我的外部驱动器上没有安装GRUB时,外部驱动器显示为(hd2,gpt1),但是在外部驱动器上安装GRUB之后,它就变成了(hd0,gpt2)

  2. 也许我遇到的困难与我的第一个问题有关,但是当我在指定linux /boot/vmlinuz-linux root=/dev/sda2之后启动时,总是会遇到一些与指定为root的驱动器相关的失败。甚至当我通过设备uuid指定根时也会发生这种情况。我的问题是,我需要担心吗?
    • /etc/fstab?这是我需要改变的东西,以确保找到根吗?无论我是在内部驱动器上还是在外部驱动器上更改/etc/fstab文件,这都是重要的。(我确实修改了外部驱动器上的/etc/fstab,以便将带有根分区UUID的驱动器挂载到/,但没有效果)
    • 也许是因为它是一个usb连接的外部高清,我需要做什么特别的吗?我注意到在正常引导时看到了错误的usb 2-4: device descriptor read/64, error -71,但是由于这对驱动器的功能没有明显的影响,所以我忽略了它。这个错误也出现在两个独立的外部HD端口上,所以我假设它不是硬件问题。

澄清:

我使用博格创建了我的外部备份,它创建了所有文件的副本。它不像dd那样复制整个磁盘,因此在安装grub时,我仍然需要手动创建一个带有bios_grub标志的分区。

我在grub中尝试引导时使用的确切命令是

代码语言:javascript
复制
set root=(hd0,gpt2)
linux vmlinuz-linux root=/dev/sda2
initrd  initramfs-linux.img
boot

我已经成功地启动了。

我尝试过linux /boot/vmlinuz-linux root=/dev/sda2linux /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在引导过程中扮演的角色,还是不相关?--我将为这些问题的答案授予赏金。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-11-27 18:37:49

您的问题是root=/dev/sda2,因为这是通过device name进行挂载,这并不是唯一的。如果您只安装了一个驱动器,那么通常都会显示为/dev/sda,所以没有问题。但是,除了安装第二个磁盘或任何其他以/dev/sd?形式显示的东西外,也不能保证任何事情的顺序,而且通常情况下,sda会被移到sdb.很快就会变得乱七八糟的。

最好通过设备-id或-uuid安装,这将是唯一的。

/dev/disk/下面,您将看到以下文件夹

  • 副身份证/
  • 标签/标签
  • 旁路/
  • by-uuid/

例如,在by-id/下,您将看到链接,如

这里是我的/etc/fstab,它安装by device-id给您一个想法,我删除了额外的行,以保持它的重点。我使用EFI而不是GRUB,但是原理是相同的,只是对Grub更详细一些,{Grub{Grub在Grub统一引导程序中的重要部分}:

代码语言:javascript
复制
/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-idby uuid。别忘了用一种独特的方法(也可以是/etc/fstabby-uuid )修改by-id

代码语言:javascript
复制
# 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

票数 4
EN

Unix & Linux用户

发布于 2018-11-27 19:05:51

这应该能回答你的问题:

  • 通常,所使用的GRUB是BIOS首先看到或选择在BIOS中首先运行的磁盘上的GRUB。因为驱动器的MBR指向加载的GRUB。
  • /etc/fstab只负责自动安装、分区的过程。在窗帘的情况下,你可以完全绕过门夹。
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/483888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档