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


30

是否有人对如何将根分区移动到新驱动器并设置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

然后我尝试

chroot /mnt/newroot
update-grub

但这以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

现在将复制所有文件(有关复制策略的信息,请参见此处)。修复新问题,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

最后,安装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 .

现在,我们已经完全扎根到将来的根源。根据Maciej的说法,只需致电就可以了grub-install,但是在安装引导程序之前,我update-grub首先进行了研究/boot/grub/grub.cfg。我不确定会自动更新吗?

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

发布的内容/etc/default/grub和的确切成绩单update-grub
吉尔(Gilles)'“ SO-别成为邪恶”,

(在添加解决方案之后的思考):可能实际上是问题在于我没有/etc/fstab在中进行更新chroot(这与update-grub抱怨“ \未装入” 是一致的)。如果要再次执行此操作,那么我将首先尝试而不必费心在chroot中安装特殊文件系统。
Janus

请注意:重启前不要忘记卸载/ mnt / newroot!
Giacomo Tesio

这是有关如何将根分区/移动到新的nvme驱动器,同时将/ home保留在硬盘上的说明。lucasmanual.com/blog/…–
卢卡斯

Answers:


20

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

  • / dev(mount -o bind /dev/ /path/to/chroot/dev
  • / proc(mount -t proc none /path/to/chroot/proc
  • / sys(mount -t sysfs none /path/to/chroot/sys

在IRC上安装Grub 2以及在Gentoo上多次安装时,IIRC为我工作。然后,在chroot /path/to/chroot命令之后就是:

grub-install /dev/<boot_disk>

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


PS。我不相信实时系统的简单cp,因为在某些地方它可能会出错:

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

谢谢。所以基本上,您是说我做一个草率的chroot :)我将尝试使用适当的chroot。cp -ax根据这个旧的方法应该很好(也许在下降到单用户运行级别之后):tldp.org/HOWTO/Hard-Disk-Upgrade/copy.html
Janus,

发挥了魅力!非常感谢你的帮助。
Janus

1
@Janus:为了安全起见,我会从Live发行版中复制数据。我很高兴,但是它奏效了。
Maciej Piechotka'1

我不得不这样做update-grub之前install-grub
Aryeh Leib Taurog

3

您可以从实时发行版安装grub,而无需使用chroot:

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

谢谢。我不确定这是否可以在这里工作:据我了解,它grub-install仅更新grub图像文件并写入MBR:尤其grub.cfg是未更新。正如我在上面评论的那样,挂载特殊目录可能是过分的,但是我仍然认为chroot是一种以grub.cfg简单方式进行更新的方法吗?
Janus

是的,这对我也不起作用。您必须开始update-grub工作,那个人没有--root-directory或没有什么,对吗?
米塔尔

0

顺便说一句,如果您要添加一个分区(例如Windows),而您不希望grub在启动扇区中写一个分区,但是您想让grub在计算机启动时知道它,则可以重新扫描分区并生成在终端会话中,通过使用grub_mkconfig命令,使用一个新的grub.cfg文件

cd /启动/ grub

须藤cp grub.cfg ./grub.cfg.old

sudo grub_mkconfig -o ./grub.cfg

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.