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

Jan*_*nus 32 debian grub2

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

背景我在无头低功耗 NAS 上运行 Debian Squeeze。我目前的设置是/sda0/bootsde0(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
Run Code Online (Sandbox Code Playgroud)

然后我试过了

chroot /mnt/newroot
update-grub
Run Code Online (Sandbox Code Playgroud)

但这失败了 grub 询问是否安装了 root。然后我做了一个半心半意的尝试,在设置上/mnt/newroot/grub/grub.cfg找到内核映像sdf5,然后是一个grub-install --root-directory=/mnt/newroot /dev/sdf. 但是,当我尝试从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
Run Code Online (Sandbox Code Playgroud)

现在所有文件都已复制(有关复制策略的讨论,请参见此处)。修复新etc/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
Run Code Online (Sandbox Code Playgroud)

最后,安装devsysproc新根的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 .
Run Code Online (Sandbox Code Playgroud)

我们现在完全按照它的样子被 chroot 到未来的根。根据 Maciej 的说法,只调用 应该grub-install没问题,但我在安装引导加载程序之前先update-grub查看了生成/boot/grub/grub.cfg的内容。不知道会不会自动更新?

root@nasguld:/# update-grub
root@nasguld:/# grub-install /dev/sdb
Run Code Online (Sandbox Code Playgroud)

Mac*_*tka 23

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

  • / 开发 ( 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>
Run Code Online (Sandbox Code Playgroud)

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


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

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

  • 我必须在“install-grub”之前执行“update-grub”。 (2认同)