Open lz-lunzi opened 1 year ago
以下是我的grub2 的实现 sudo gedit /usr/share/initramfs-tools/hooks/vdfuse
PREREQ="" prereqs() { echo "$PREREQ" }
case "$1" in prereqs) prereqs exit 0 ;; esac
. /usr/share/initramfs-tools/hook-functions
copy_exec /etc/fuse.conf /etc copy_exec /usr/bin/qemu-nbd /sbin
修改init-top实现自定义文件系统挂载逻辑 sudo gedit /usr/share/initramfs-tools/scripts/init-top/vdfuse
PREREQ="udev" prereqs() { echo "$PREREQ" }
case "$1" in prereqs) prereqs exit 0 ;; esac
if [ ! -z $vdisk ]; then mkdir /vdhost mkdir /dev/vdhost mount -t ntfs $host /vdhost/ modprobe nbd exec -a @11 /sbin/qemu-nbd -c /dev/nbd1 /vdhost$vdisk mount -t ext4 $ROOT /root
fi
sudo gedit /usr/share/initramfs-tools/scripts/init-bottom/vdhost
PREREQ="" prereqs() { echo "$PREREQ" } case "$1" in prereqs) prereqs exit 0 ;; esac if [ -d ${rootmnt}/vdhost ]; then mount -n -o move /vdhost ${rootmnt}/vdhost fi
sudo chmod +x /usr/share/initramfs-tools/hooks/vdfuse
sudo chmod +x /usr/share/initramfs-tools/scripts/init-top/vdfuse
sudo chmod +x /usr/share/initramfs-tools/scripts/init-bottom/vdhost
sudo /usr/sbin/mkinitramfs -o ./initrd.img
该方案我也在研究,目前卡在挂载工具问题上,vdfuse过渡依赖vbox,nbd又引导不起来,看起来得自己实现一个挂载工具。
@want20
initramfs-tools +qemu-nbd 可以实现大部分的linux的vhd引导。
但是实现上每次更新内核后都要重新生成并拷贝到外部
如果可以实现和votyboot 的方式将会更好 用户无需关注votyboot之外的操作 。
此外对于dracut 等其他方式可以参考https://github.com/MobtgZhang/VHD-Boot
但是我并没有在这方案中成功实现 如果有成功消息可以在此分享
@lz-lunzi initramfs-tools +qemu-nbd 可以实现大部分的linux的vhd引导。 但是实现上每次更新内核后都要重新生成并拷贝到外部 如果可以实现和votyboot 的方式将会更好 用户无需关注votyboot之外的操作 。 此外对于dracut 等其他方式可以参考https://github.com/MobtgZhang/VHD-Boot 但是我并没有在这方案中成功实现 如果有成功消息可以在此分享
initramfs-tools+qemu-nbd我没有成功过,每次切换 root 文件系统的时候 nbd 的连接都会断掉,dracut 也是这样,目前我用自己写的工具可以实现引导,因为是纯c写的,所以没啥依赖,移植到 arm一样可以。另外 initramfs-tools 做的镜像关机会卡住,挂载的镜像没法成功卸载。
还有内核拷贝的问题,grub 整个 vhd 解析插件就行了,无需拷贝出来,而且这个插件只读的就行。结合自己写的 dd 插件,可以实现还原。
votyboot的方式还没仔细研究,可以研究一下,能够在启动某个阶段hook?
更新内核重新生成应该无法避免吧?vtoyboot更新内核不也要重新跑一遍脚本?
此外,貌似之前看到有个qcow2 挂载的linux内核requests记录(还是野生patch之类的),要是能被采纳就好了,新内核直接可以挂载 qcow镜像到设备,没了解有没有或者会不会被合入。
有尝试其他方案下的动态磁盘引导linux 但是该方案很久没有维护了如果可以希望可以支持到 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=418705&ordertype=1 https://forum.ubuntu.com.cn/viewtopic.php?t=461537
其次有想过 1.将引导部分设置为固定安装最小系统 启动后加载数据 例如(桌面环境或驱动) 2.或者通过加载qemu-nbd 直接引导虚拟系统