我正在编写一个采用主KVM映像的脚本,将其转换为VDI,对其进行一些更改,
并提供下载.
并提供下载.
我需要为一些新创建的映像更新内核启动参数.通常会有人
编辑/ etc / default / grub中的GRUB_CMDLINE_LINUX_DEFAULT设置,然后运行update-grub.的
当然,我只能在chroot中执行此操作,这会失败:’/usr/sbin / grub-probe:错误:找不到
/(是/ dev安装?)的设备.
将挂载/ dev从正在运行的系统绑定到chroot允许update-grub运行,但结果是
一个破碎的grub.cfg(从图像的角度来看错误的根设备).
如果我只是使用sed来添加我需要的内核参数,它将启动图像启动,但是
后续运行的update-grub(从现在运行的映像内部)将导致麻烦.
所以我目前的解决方案是:
>编辑/ etc / default / grub中的参数
>将mount / dev绑定到chroot中
>在chroot中运行update-grub
>使用sed修复/boot/grub/grub.cfg中的错误设备节点
请告诉我有更好的方法.
正确的答案是将/ dev挂载到chroot中,并使用$CHROOT / boot / grub / device.map文件告诉grub(hd0)(从图像的角度来看)实际上是你已经“分区”的环回文件“(然后用kpartx等安装到你的chroot中).
原文链接:https://www.f2er.com/ubuntu/347741.html# generate grub configs and install it to the generated blockdev chroot $MR update-grub 2> /dev/null chroot $MR grub-mkconfig -o /boot/grub/grub.cfg 2> /dev/null cat > $MR/boot/grub/device.map <<EOF (hd0) ${LOOPDEV} EOF chroot $MR grub-install ${LOOPDEV} 2> /dev/null
在你完成将grub安装到loopdev的“mbr”之后,你应该使用device.map文件,因为一旦实际启动它就不会从图像的角度来看是准确的.
我有一个脚本,为ubuntu 13.10 saucy x64构建完整的qcow2图像:
https://github.com/sneak/kvm-ubuntu-imagebuilder/blob/master/buildimage.sh#L211
祝好运.