Debian/Grub2:将根分区移动到新驱动器?

Debian/Grub2:将根分区移动到新驱动器?

有人建议如何将根分区移动到新驱动器并设置 grub2 在该驱动器上启动吗?我似乎没有运气指示 grub-mkconfig 我想要做什么(例如 chroot'int 进入我的新根只会混淆所有脚本)。

背景我在无头低功耗 NAS 上运行 Debian Squeeze。我当前的设置是/开启sda0/boot开启sde0(CF 卡):我需要单独的,/boot因为sd[a-d]需要进行延迟旋转。现在我找到了一个旧的 2.5 英寸 IDE 磁盘来使用,//boot允许我旋转所有大磁盘。

我尝试过的基本上我去了

mount -o rw /dev/sdf5 /mnt/newroot
cp -ax / /mnt/newroot
cp -ax /boot /mnt/newroot/boot

然后我尝试了

chroot /mnt/newroot
update-grub

但这失败了,grub 询问 root 是否已挂载。然后我半心半意地尝试在 上/mnt/newroot/grub/grub.cfg查找内核映像sdf5,然后是grub-install --root-directory=/mnt/newroot /dev/sdf.但是,当我尝试从 启动时,这只是给我带来了 grub 救援提示sdf

我的备份计划是重新安装,所以有一个额外的问题(这个没有复选标记):我需要做什么才能让我的 lvm2 和 mdadm 配置通过?它是否全部存储在文件系统中(并且会自动发现),还是我需要自己获取?

解决方案(感谢 Maciej Piechotka):正如 Maciej 指出的那样,我需要正确的 chroot 才能使所有 grub 工具正常工作。作为参考,我是这样做的:

janus@nasguld:/mnt/newroot$ sudo cp -ax / /mnt/newroot
janus@nasguld:/mnt/newroot$ sudo cp -ax /boot /mnt/newroot

现在所有文件都已复制(请参阅这里有关复制策略的讨论)。修复 newetc/fstab以指向新的根:

janus@nasguld:/mnt/newroot$ diff -u etc/fstab.old  etc/fstab
    -UUID=399b6a6d-c067-4caf-bb3e-85317d66cf46 /     ext3 errors=remount-ro         0 1
    -UUID=b394b614-a977-4860-bbd5-7862d2b7e02a /boot ext3 defaults                  0 2
    +UUID=b9d62595-e95c-45b1-8a46-2c0b37fcf153 /     ext3 noatime,errors=remount-ro 0 1

最后, mount devsysproc到新的 root 和 chroot:

janus@nasguld:/mnt/newroot$ sudo mount -o bind /dev /mnt/newroot/dev
janus@nasguld:/mnt/newroot$ sudo mount -t proc none  /mnt/newroot/proc
janus@nasguld:/mnt/newroot$ sudo mount -t sysfs none /mnt/newroot/sys
janus@nasguld:/mnt/newroot$ sudo parted /dev/sdb set 5 boot on 
janus@nasguld:/mnt/newroot$ sudo chroot .

我们现在已经被chroot到了未来的根,就像它看起来的那样。根据 Maciej 的说法,只需调用 就可以了grub-install,但我在安装引导加载程序之前update-grub首先查看了生成的内容。/boot/grub/grub.cfg不知道会自动更新吗?

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb

答案1

挂载基本文件系统并在 chroot 时复制/修改文件,例如:

  • /dev ( mount -o bind /dev/ /path/to/chroot/dev)
  • /进程(mount -t proc none /path/to/chroot/proc
  • /系统(mount -t sysfs none /path/to/chroot/sys

IIRC 在 arch 中安装 Grub 2 时为我工作,并在 Gentoo 上多次安装。然后 chroot 后的/path/to/chroot命令很简单:

grub-install /dev/<boot_disk>

从lvm2(我相信madm,但我没有使用它)开始,配置存储在磁盘上。有一些配置应该读取以发现设备。假设您的设备位于标准位置(/dev/sd*/dev/hd*),应该没有问题。


附言。我不会相信实时系统的简单 cp,因为有几个地方可能会出错:

  • 忘记更改/etc/fstab和其他有用的文件
  • 文件在访问期间发生更改
  • 处理垃圾(/tmp等)

答案2

您可以从 live 发行版安装 grub,无需 chroot:

grub-install /dev/hda --root-directory=/mnt/guest/

答案3

顺便说一句,如果您要添加一个分区(例如 Windows),您不希望 grub 在引导扇区中写入 a ,但您希望 grub 在计算机启动时知道它,您可以重新扫描分区并生成在终端会话中使用 grub_mkconfig 命令创建新的 grub.cfg 文件,如下所示

cd /启动/grub

sudo cp grub.cfg ./grub.cfg.old

sudo grub_mkconfig -o ./grub.cfg

现在,当您从当前的 Linux 分区(由 grub 引导)启动时,它现在会知道另一个分区。

相关内容