windowsvhd制作linux系统,LINUX-VHD系统的制作方法 UBUNTU ARCH Fedora Opensuse Mageia五种

本帖最后由 2011niumao 于 2015-2-15 16:23 编辑

VLOOP共享链接

http://pan.baidu.com/s/1mgFi1Qg

增加一个KLOOP专用的共享链接

http://pan.baidu.com/s/1bnnjBXX

原来的在VLOOP链接下的子目录KLOOP依然有效.

推荐KLOOP: 新添加 KLOOP模式引导 .使用说明和制作好的UBUNTU FEDORA的内存初始化镜像盘请到 KLOOP子目录中下载.

在UBUNTU FEDORA系统下制作kloop模式的内存初始化镜像盘的教程也已发布在KLOOP子目录中.2015年2月8日

KLOOP子目录内: mydracut-kloop教程更新版.zip

发布更新过的KLOOP教程.更新了05-vhdmount.sh  10-vhdmount-kloop.sh的代码.

内含五种LINUX: UBUNTU FEDORA ARCH OPENSUSE MAGEIA 发布版的具体制作方法.  2015年2月15日

VLOOP模式引制作教程导见下:

Fedora 21 Opensuse 13.2 Mageia 4 系统===制作可以引导固定大小VHD的dracut方法:

见上面链接内的文件 mydracut.zip

ARCH-LINUX的引导VHD的initramfs制作

见文件 VHDBOOTARCHV6.zip

UBUNTU的可以引导固定大小的VHD的initrd.img 制作教程

见文件 VHDBOOTDIYV7.zip

另外 有很多制作好的可引导固定大小VHD内linux系统的内存初始化镜像盘,以及同版本的内核vmlinuz 内核驱动模块(版本号.zip)

如果版本相同则可以直接使用.不需要自己制作了

===即只需要三步

1  使用Virtualbox安装好LINUX系统,

2  下载对应版本的内核 vmlinuz 与 initrd(dracut)  还有内核驱动模块

3  设置引导.

有 UBUNTU系列  ARCH系列 dracut-opensue (3.16.6-2-desktop) dracut-fedora(3.17.8-2) dracut-mageia (3.14.27)

附有 小grub通用启动器-2014-12-06  帮助设置引导,内里有使用说明,依照说明添加引导 编辑菜单 即可.

UBUNTU制作可以引导VHD系统的initrd.img 的方法http://pan.baidu.com/s/1mgFi1Qg0.在windows系统下使用virtualbox软件建立固定大小的vhd虚拟磁盘文件.推荐16g大小.注意不可以使用动态大小的vhd,只能使用固定大小的vhd.下载并使用UBUNTU安装盘将UBUNTU系统安装在vhd上面====只分一个主分区来挂载/目录.分成多个主分区请看注释。注释:分成多个主分区也可以的。如果有多个分区,注意修改vlooppart参数的值,使得它指向/分区。例如vhd分三个区,/挂载在第三个分区,则引导参数改为 vlooppart=p3。此外不支持逻辑分区。所以如果分区较多,可以使用gpt格式磁盘。如果不分区或分区个数不超过4,可以使用mbr格式并把所有分区设定为主分区。以下制作能够直接引导vhd内UBUNTU系统的initrd.img文件:1.首先安装kpartx,kpartx-boot,util-linux,dm-setup一些软件。可以在新立得中搜索安装。也可以使用命令。打开一个终端,输入

sudo apt-get install kpartx kpartx-boot util-linux dmsetup复制代码

2.修改两个文件:local  mkinitramfs先备份两个文件

sudo cp /usr/share/initramfs-tools/scripts/local ./local.backup

sudo cp /usr/sbin/mkinitramfs ./mkinitramfs.backup复制代码

再依次修改两个文件:修改local文件

sudo gedit /usr/share/initramfs-tools/scripts/local复制代码

再将本附件所带的local文件用gedit打开,找到如下部分

##############################################################

#                         TO BOOT FROM VHD                   #

##############################################################

for x in $(cat /proc/cmdline); do

case $x in

vloop=*)

VLOOP="${x#vloop=}"

;;

vlooppart=*)

VLOOPPART="${x#vlooppart=}"

;;

vloopfstype=*)

VLOOPFSTYPE="${x#vloopfstype=}"

;;

vloopcheck=*)

VLOOPCHECK="${x#vloopcheck=}"

;;

esac

done

if [ "$VLOOP" ]; then

if [ "$mountroot_status" != 0 ]; then

if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then

panic "

Could not mount the partition ${ROOT}.

This could also happen if the file system is not clean because of an operating

system crash, an interrupted boot process, an improper shutdown, or unplugging

of a removable device without first unmounting or ejecting it.  To fix this,

simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then

gracefully shut down and reboot back into Windows. After this you should be

able to reboot again and resume the installation.

(filesystem = ${FSTYPE}, error code = $mountroot_status)"

fi

fi

mkdir -p /host

mount -o move ${rootmnt} /host

str=${VLOOP}

disk_files="/host${str}"

# FIXME This has no error checking

modprobe loop

kpartx -av "${disk_files}"

sleep 3

# Get the vloop filesystem type if not set

if [ -z "${VLOOPFSTYPE}" ]; then

FSTYPE="unknown"

else

FSTYPE="${VLOOPFSTYPE}"

fi

if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then

FSTYPE=$(/sbin/blkid -s TYPE -o value "/dev/mapper/loop0${VLOOPPART}")

[ -z "$FSTYPE" ] && FSTYPE="ext4"

fi

if [ ${readonly} = y ]; then

roflag=-r

else

roflag=-w

fi

[ -z "$VLOOPCHECK" ] && VLOOPCHECK="no"

if [ "$VLOOPCHECK" = "yes" ] ; then

echo "checking vloop / filesystem, please wait....."

fsck.${FSTYPE} -a "/dev/mapper/loop0${VLOOPPART}"

fi

mount -t ${FSTYPE} "/dev/mapper/loop0${VLOOPPART}" ${rootmnt}

if [ -d ${rootmnt}/host ]; then

mount -o move /host ${rootmnt}/host

fi

fi

##############################################################

#                     end,      TO BOOT FROM VHD             #

##############################################################复制代码

拷贝到/usr/share/initramfs-tools/scripts/local 文件的相同位置处。这个位置在文件最后几行上面,最后结果,接着上面的这段后面是以下几行。

[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom"

run_scripts /scripts/local-bottom

[ "$quiet" != "y" ] && log_end_msg

}复制代码

该文件结束。注释: 新增两个控制参数: vloopfstype=ext4 ---说明vhd中根文件系统的文件系统类型。vloopcheck=yes 或 no  ---控制启动时强制做一次磁盘检查。比较简陋。如果没有特殊需要不用理会。3 修改mkinitramfs文件

sudo gedit /usr/sbin/mkinitramfs复制代码

找到# util-linux,在其下插入以下几行:

copy_exec /sbin/losetup /sbin

copy_exec /sbin/kpartx /sbin

copy_exec /sbin/shutdown /shutdown

cp -a /sbin/fsck*  ${DESTDIR}/sbin/

copy_exec /sbin/e2fsck /sbin

touch ${DESTDIR}/etc/initrd-release

touch ${DESTDIR}/version复制代码

最后该处几个语句为

# util-linux

copy_exec /sbin/blkid /sbin

copy_exec /sbin/losetup /sbin

copy_exec /sbin/kpartx /sbin

copy_exec /sbin/shutdown /shutdown

cp -a /sbin/fsck*  ${DESTDIR}/sbin/

copy_exec /sbin/e2fsck /sbin

touch ${DESTDIR}/etc/initrd-release

touch ${DESTDIR}/version复制代码

记得保存一下。第四步第五步可选。不执行也可以的。实际上只有在使用ubuntu内核引导其他LINUX发行版特别是使用systemd的发行版时候才需要第四步第五步。但是据说UBUNTU在14.10版本也要使用systemd了。所以这一步到时候也许也必须作了。其方法来自于互联网http://www.freedesktop.org/wiki/ ... RootStorageDaemons/http://www.freedesktop.org/wiki/Software/systemd/InitrdInterface/4.附件ntfs-3g_ntfsprogs-2014.2.15.fixed 是已经修改好的ntfs-3g源码.对他手工编译安装.打开一个终端.进入该目录.依次执行以下命令:

./configure

make

sudo make install复制代码

(这一步是为了在使用了 systemd 的linux系统中避免关机时候出现 buffer I/O 错误====UBUNTU计划在14.10版中使用systemd====也许到时候会有官方的避免出现 buffer  I/O 错误的机制 发布出来.目前只有这个重编译 ntfs-3g源码 的方法====实际上是 systemd 官方推荐的方法)5.编辑文件:/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g .

sudo gedit /usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g复制代码

将以下拷贝覆盖原始内容即可。

#!/bin/sh

##set -e

##case "${1}" in

##        prereqs)

##                exit 0

##                ;;

##esac

if [ "${ROOTFSTYPE}" = ntfs ] || [ "${ROOTFSTYPE}" = ntfs-3g ] || \

[ "${LOOPFSTYPE}" = ntfs ] || [ "${LOOPFSTYPE}" = ntfs-3g ]

then

mkdir -p /run/sendsigs.omit.d

pidof mount.ntfs >> /run/sendsigs.omit.d/ntfs-3g

pidof mount.ntfs-3g >> /run/sendsigs.omit.d/ntfs-3g

fi

#####################################################################

##the following maybe help to resolve the buffer I/O error problem

##when reboot or halt.

#####################################################################

if [ -d /run/initramfs -a -f /init ]

then

mkdir -p /run/initramfs/dev /run/initramfs/host /run/initramfs/proc /run/initramfs/root /run/initramfs/run /run/initramfs/sys /run/initramfs/tmp

rm -rf   /lib/modules

for xxx in /*

do

if [ ${xxx} = "/dev" -o ${xxx} = "/host" -o ${xxx} = "/proc" -o ${xxx} = "/root" -o ${xxx} = "/run" -o ${xxx} = "/sys" -o ${xxx} = "/tmp" ];

then

:

else

cp -a ${xxx} /run/initramfs/  1>/dev/null 2>&1;

fi

done

unset xxx

fi

####################################################################

exit 0复制代码

6.生成initrd.img文件

sudo /usr/sbin/mkinitramfs -o ~/initrd.img (可以加上版本号得到其他内核版本的initrd.img)复制代码

7,引导设置有两种方式: grub2 grub4dos .当然最好是自动搜索确定UUID并把它传给内核.这样只需要设置启动到grub4dos grub2就可以了.不需要手工修改menu.lst grub.cfg.而设置启动,对于win7 可以使用bootice编辑修改BCD文件.对于winxp,可以编辑修改boot.ini文件做到.参看 grub通用启动器20130724 的说明.grub4dos比较简单好用,但是不能用于UEFI-gpt的电脑.只能用于BIOS-MBR.grub4dos自动搜索UUID的菜单例子

title VBUNTUFIX uuid-auto-probe

find --set-root --ignore-floppies --ignore-cd /vbuntufix/vbuntufix.vhd

uuid ()

kernel /vbuntufix/vmlinuz  root=UUID=%?% vloop=/vbuntufix/vbuntufix.vhd vlooppart=p1

initrd /vbuntufix/initrd.img复制代码

grub2适用于UEFI与 BIOS,应用范围较广。grub2自动探测UUID的菜单

menuentry 'VBUNTUFIX linux' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail

insmod gzio

insmod part_msdos

insmod part_gpt

insmod ext2

insmod ntfs

insmod probe

insmod search

search --no-floppy -f --set=aabbcc /vbuntufix/vbuntufix.vhd

set root=${aabbcc}

probe -u --set=ddeeff ${aabbcc}

linux        /vbuntufix/vmlinuz root=UUID=${ddeeff} vloop=/vbuntufix/vbuntufix.vhd vlooppart=p1

initrd        /vbuntufix/initrd.img

}复制代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值