我有一台位于云环境中的 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