首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改linux内核,以便在引导时挂载vhd文件并从中加载系统?

如何修改linux内核,以便在引导时挂载vhd文件并从中加载系统?
EN

Stack Overflow用户
提问于 2012-08-24 22:22:08
回答 2查看 7.5K关注 0票数 1

我想修改linux内核,以便它可以挂载vhd文件,并从it...please开始给我一些想法!正如我们所知道的,linux内核在加载initrd.gz之后挂载hardisk分区……我想要的不是挂载linux分区,而是应该挂载一个vhd文件,该文件位于安装ubuntu的硬盘中的某个位置,然后从它启动系统。Windows7支持这种从vhd启动的功能,但是ubuntu做了not..so,我问的是我们如何为此目的修改内核。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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用户空间。

票数 2
EN

Stack Overflow用户

发布于 2013-02-04 18:49:30

如果你正在尝试启动Ubuntu Linux,下面是我所做的:

在windows中下载并安装vhd,或使用google solution

  • Install Virtualbox

  • Install
  1. vboot-v1 grub2

ubuntu安装vhd类型的磁盘,然后在Ubuntu中安装vhd-

  1. -
  2. ,在ubuntu中添加以下文件到文件系统:

/etc/initramfs-tools/hooks/vdfuse

代码语言:javascript
复制
 #!/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

代码语言:javascript
复制
 #!/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

代码语言:javascript
复制
 #!/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

代码语言:javascript
复制
 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
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12111233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档