更改引导分区后是否需要重新安装 grub 到 MBR

更改引导分区后是否需要重新安装 grub 到 MBR

我有一台位于云环境中的 Centos 6 服务器,我想将根分区从现有硬盘移动到另一个硬盘。

在原始硬盘(/dev/xvda1)中,它还有其他文件夹,例如/var,,,/usr并且我不想将它们移动,所以我不能简单地将dd整个旧硬盘转移到新硬盘(/dev/xvdh1)。

我现在已将rsync所有内容/(除了上面提到的内容)保存到/dev/xvdh1/var /usr另一个硬盘 (/dev/xvdg)。我已修改新硬盘中的以下文件以使用新的 UUID:

  • /etc/fstab
  • /boot/grub/grub.conf

这是输出blkid

/dev/xvdh1: UUID="9b84e28c-5a12-4889-804a-753e56645333" TYPE="ext4"

/etc/fstab进行安装的行/

UUID="9b84e28c-5a12-4889-804a-753e56645333" /   ext4    defaults        1 1

/boot/grub/grub.conf

default=0
timeout=1
title CentOS 6 (2.6.32-573.18.1.el6.x86_64)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.32-573.18.1.el6.x86_64 ro root=UUID=9b84e28c-5a12-4889-804a-753e56645333 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD console=ttyS0,115200 crashkernel=auto SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
        initrd /boot/initramfs-2.6.32-573.18.1.el6.x86_64.img

我还有从到 的dd引导扇区代码:/dev/xvda/dev/xvdh1

dd if=/dev/xvda of=/dev/xvdh bs=446 count=1

两个硬盘元数据的输出:

# file -s /dev/xvda
/dev/xvda: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, boot drive 0x80, 1st sector stage2 0x8cc500, GRUB version 0.94; partition 1: ID=0x83, active, starthead 32, startsector 2048, 16775168 sectors, code offset 0x48

# file -s /dev/xvda1
/dev/xvda1: Linux rev 1.0 ext4 filesystem data (needs journal recovery) (extents) (large files) (huge files)

# file -s /dev/xvdh
/dev/xvdh: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, boot drive 0x80, 1st sector stage2 0x8cc500, GRUB version 0.94; partition 1: ID=0x83, active, starthead 32, startsector 2048, 4192256 sectors, code offset 0x48

# file -s /dev/xvdh1
/dev/xvdh1: Linux rev 1.0 ext4 filesystem data (needs journal recovery) (extents) (large files) (huge files)

完成上述所有步骤后,我分离了旧硬盘并附加了新硬盘/dev/xvda1,然后启动。然而,当我启动机器时,我陷入了 grub 错误:

Booting from Hard Disk... 
Geom Error

/dev/xvda1和的大小/dev/xvdh1不同,显然它们的 UUID 也不同。所以我的问题是:我是否需要做一个grub-install才能将我所做的修改grub.conf写入引导扇区代码?或者永远不需要这样做,因为启动代码是相同的,并且根分区信息永远不会存储在那里,启动代码将能够读取以grub.conf获取信息而无需额外的步骤?

如果我需要更改任何其他文件以使 grub 启动服务器,请说明一下,谢谢。 (grub 版本:0.94)

答案1

是的,我相信您应该运行grub-install,因为位置(如下所述)取决于包含阶段 2 的文件系统。

您说您将引导扇区从旧磁盘 ( /dev/xvda) 复制到新磁盘 ( /dev/xvdh1) 上的第一个分区。代码不需要放在新磁盘的第一个扇区中,而不是分区中吗?

正如您所建议的,初始阶段包含指向第二阶段的指针,并在此答案的图形中注明:https://unix.stackexchange.com/a/258867/216116

此外,Debian 设置为在常规软件更新期间运行,因此您的解决方案按照您的意愿执行(当然,使用适当的参数)grub-install应该不会有什么坏处。grub-install

相关内容