我想修改linux内核,以便它可以挂载vhd文件,并从it...please开始给我一些想法!正如我们所知道的,linux内核在加载initrd.gz之后挂载hardisk分区……我想要的不是挂载linux分区,而是应该挂载一个vhd文件,该文件位于安装ubuntu的硬盘中的某个位置,然后从它启动系统。Windows7支持这种从vhd启动的功能,但是ubuntu做了not..so,我问的是我们如何为此目的修改内核。谢谢
发布于 2012-08-25 00:52:42
这一点都不容易。
要开始加载Linux,需要使用引导加载程序。此程序查找vmlinux或vmlinuz文件和initrd文件,并将它们加载到RAM中。
我假设您的VHD文件存储在NTFS文件系统中。VHD文件中包含vmlinuz和initrd文件。
因此,首先,引导加载程序需要理解NTFS。接下来,引导加载程序需要理解VHD。
只有在此之后,Linux才能开始加载。
在这一点上,事情变得更容易了,因为Linux有可以使用的NTFS文件系统驱动程序。可能是NTFS-3G用户空间驱动程序与FUSE结合在一起。我不确定VHD的格式,但你可以使用VirtualBox的vdfuse来挂载它。
NTFS和VHD挂载程序必须放在initrd中。然后,initrd可以从VHD挂载根分区,并进入普通的Linux用户空间。
发布于 2013-02-04 18:49:30
如果你正在尝试启动Ubuntu Linux,下面是我所做的:
在windows中下载并安装vhd,或使用google solution
ubuntu安装vhd类型的磁盘,然后在Ubuntu中安装vhd-
/etc/initramfs-tools/hooks/vdfuse
#!/bin/sh
set -e
PREREQ=""
prereqs()
{
echo "${PREREQ}"
}
case "${1}" in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
if [ -x /usr/ ]
then
copy_exec /usr/bin/vdfuse /bin
fi/etc/initramfs-tools/sc~ts/init-bottom/vhdhost
#!/bin/sh
PREREQ=""
# Output pre-requisites
prereqs()
{
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
mount -n -o move /vhdhost ${rootmnt}/vhdhost
exit 0/etc/initramfs-tools/scripts/init-top/vdfuse
#!/bin/sh
PREREQS=""
prereqs()
{
echo $PREREQS
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
mkdir /vhdhost
mount /dev/sda2 /vhdhost/ -t ntfs-3g
mkdir /dev/vhdhost
vdfuse -f /vhdhost/$vloop /dev/vhdhost
exit 0运行update-initramfs -k all -c
现在,您只需修改引导加载程序即可加载您的虚拟硬盘文件,例如,将此文件添加到grub.cfg
menuentry "VHD Ubuntu 12.10 64-bit" {
insmod vhd
vhd vhd0 (hd0,2)/vhd/Ubuntu.vhd --partitions
linux (vhd0,1)/boot/vmlinuz-3.5.0-23-generic root=/dev/vhdhost/Partition1 vloop=/vhd/Ubuntu.vhd quiet splash
initrd (vhd0,1)/boot/initrd.img-3.5.0-23-generic
}https://stackoverflow.com/questions/12111233
复制相似问题