有人建议如何将根分区移动到新驱动器并设置 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 dev
,sys
并proc
到新的 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 引导)启动时,它现在会知道另一个分区。