无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 218413|回复: 613
打印 上一主题 下一主题

[教程] 从 固定VHD与只读squashfs引导LINUX, UBUNTU ARCH Fedora Opensuse Mageia五种

    [复制链接]
跳转到指定楼层
1#
发表于 2014-6-29 15:33:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 2011niumao 于 2022-10-16 10:59 编辑

从 固定VHD系统与只读squashfs系统引导LINUX, UBUNTU ARCH Fedora Opensuse Mageia五种

新教程(还在以下原来的百度云链接下载)

制作vhd的UBUNTU.pdf

在虚拟机内可以直接复制粘贴 pdf 教程里的命令和代码,这样就对网友们友好多了。

local文件里增加的代码也可以看第572楼,573楼:

http://bbs.wuyou.net/forum.php?m ... 0&extra=#pid4689869


新版ntfs-3g-2021与新版grubsmall2022(没有新系统)。 新版grubsmall2022的菜单针对的是以下部署,

vhd文件名为 ubt.vhd ,和两个引导文件 vmlinuz initrd.img 一起放在一个硬盘根分区下

如果你的部署与此不同,根据具体情况编辑grub2菜单来调整引导参数,编辑一下菜单即可。

注释:如果依照mydracut教程制作的Fedora的vhd,squashfs不能引导,编辑grub2菜单,把root参数改用LABEL=XXXX(不含中文),这里XXXX是vhd文件所在分区卷标。并在其后面加入 selinux=0, 如下代码所示,即可正确引导。
  1. linux         /vmlinuz  root=LABEL=XXXX  kloop=/Fedora.vhd kroot=/dev/mapper/loop0p1 selinux=0
复制代码

以下旧信息

引导只读squashfs系统的方法请下载链接中的更新好的mydracut.zip文件。内含说明。
https://pan.baidu.com/s/18NTBbzlVLdHXxUcnpXFMNw
提取码 w4af

用户名 所有密码都是 ubuntu .
用户名密码,root密码都是ubuntu .
,
        安装grub2的参考命令:
        sudo mount /dev/mapper/loop2p1 /mnt
        sudo grub-install  --root-directory=/mnt  /dev/loop2

(新版的/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g。可以直接覆盖本地同名文件。旧版关机时会引起panic)
  1. #!/bin/sh

  2. set -e
  3. case "${1}" in
  4.         prereqs)
  5.                 exit 0
  6.                 ;;
  7. esac

  8. if [ "${ROOTFSTYPE}" = ntfs ] || [ "${ROOTFSTYPE}" = ntfs-3g ] || \
  9.    [ "${LOOPFSTYPE}" = ntfs ] || [ "${LOOPFSTYPE}" = ntfs-3g ] || [ -n "$KLOOP" ] || [ -n "$SQUASHFS" ]
  10. then
  11.         mkdir -p /run/sendsigs.omit.d
  12.         pidof @ount.ntfs-3g >> /run/sendsigs.omit.d/ntfs-3g
  13. fi
  14. exit 0
复制代码

mydracut.zip

1.34 MB, 下载次数: 539, 下载积分: 无忧币 -2

引导固定vhd只读squashfs的linux

ubuntukloopnew.zip

406.8 KB, 下载次数: 102, 下载积分: 无忧币 -2

详细注释

ntfs_3g.zip

387 Bytes, 下载次数: 40, 下载积分: 无忧币 -2

依照此附件编辑或者覆盖ntfs_3g

评分

参与人数 11无忧币 +66 收起 理由
Kernelam2 + 1 赞一个!
vrboxing + 5 赞一个!
a__gu + 5 很给力!
JackeyKing + 5 很给力!
nero1906 + 5 很给力!
ql1307096 + 5 非常好的教程。1
yGeo + 5 赞一个!
jxdeng + 5 赞一个!,非常棒的技术。
2012goodsoft + 5 赞一个!
2011hjcjie + 20 赞一个!世界有你更精彩。
totootao + 5 赞一个! 授人以鱼,不如授人以渔!

查看全部评分

推荐
发表于 2014-6-29 23:12:48 | 只看该作者
很牛的教程,支持一个
回复

使用道具 举报

推荐
 楼主| 发表于 2014-6-29 15:37:28 | 只看该作者
本帖最后由 2011niumao 于 2014-12-13 18:34 编辑

UBUNTU制作可以引导VHD系统的initrd.img 的方法
http://pan.baidu.com/s/1mgFi1Qg

0.在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一些软件。
可以在新立得中搜索安装。也可以使用命令。
打开一个终端,输入
  1. sudo apt-get install kpartx kpartx-boot util-linux dmsetup
复制代码

2.修改两个文件:local  mkinitramfs
先备份两个文件
  1. sudo cp /usr/share/initramfs-tools/scripts/local ./local.backup
  2. sudo cp /usr/sbin/mkinitramfs ./mkinitramfs.backup
复制代码

再依次修改两个文件:
修改local文件
  1. sudo gedit /usr/share/initramfs-tools/scripts/local
复制代码

再将本附件所带的local文件用gedit打开,找到如下部分
  1.         ##############################################################
  2.         #                         TO BOOT FROM VHD                   #
  3.         ##############################################################
  4.         for x in $(cat /proc/cmdline); do
  5.         case $x in
  6.         vloop=*)
  7.                 VLOOP="${x#vloop=}"
  8.                 ;;
  9.         vlooppart=*)
  10.                 VLOOPPART="${x#vlooppart=}"
  11.                 ;;
  12.         vloopfstype=*)
  13.                 VLOOPFSTYPE="${x#vloopfstype=}"       
  14.                 ;;
  15.         vloopcheck=*)
  16.                 VLOOPCHECK="${x#vloopcheck=}"       
  17.                 ;;
  18.         esac
  19.         done
  20.         if [ "$VLOOP" ]; then
  21.                 if [ "$mountroot_status" != 0 ]; then
  22.                         if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then
  23.                                 panic "
  24.                 Could not mount the partition ${ROOT}.
  25.                 This could also happen if the file system is not clean because of an operating
  26.                 system crash, an interrupted boot process, an improper shutdown, or unplugging
  27.                 of a removable device without first unmounting or ejecting it.  To fix this,
  28.                 simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then
  29.                 gracefully shut down and reboot back into Windows. After this you should be
  30.                 able to reboot again and resume the installation.
  31.                 (filesystem = ${FSTYPE}, error code = $mountroot_status)"
  32.                         fi
  33.                 fi
  34.        
  35.                 mkdir -p /host
  36.                 mount -o move ${rootmnt} /host

  37.                 str=${VLOOP}

  38.                 disk_files="/host${str}"                       
  39.                
  40.                 # FIXME This has no error checking
  41.                 modprobe loop
  42.                 kpartx -av "${disk_files}"
  43.                 sleep 3
  44.                
  45.                 # Get the vloop filesystem type if not set
  46.                 if [ -z "${VLOOPFSTYPE}" ]; then
  47.                         FSTYPE="unknown"
  48.                 else
  49.                         FSTYPE="${VLOOPFSTYPE}"
  50.                 fi
  51.                 if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then
  52.                         FSTYPE=$(/sbin/blkid -s TYPE -o value "/dev/mapper/loop0${VLOOPPART}")
  53.                         [ -z "$FSTYPE" ] && FSTYPE="ext4"
  54.                 fi
  55.                
  56.                 if [ ${readonly} = y ]; then
  57.                         roflag=-r
  58.                 else
  59.                         roflag=-w
  60.                 fi
  61.                
  62.                 [ -z "$VLOOPCHECK" ] && VLOOPCHECK="no"
  63.                 if [ "$VLOOPCHECK" = "yes" ] ; then
  64.                 echo "checking vloop / filesystem, please wait....."
  65.                 fsck.${FSTYPE} -a "/dev/mapper/loop0${VLOOPPART}"
  66.                 fi
  67.                        
  68.                 mount -t ${FSTYPE} "/dev/mapper/loop0${VLOOPPART}" ${rootmnt}       

  69.                 if [ -d ${rootmnt}/host ]; then
  70.                         mount -o move /host ${rootmnt}/host
  71.                 fi
  72.         fi
  73.         ##############################################################
  74.         #                     end,      TO BOOT FROM VHD             #
  75.         ##############################################################
复制代码

拷贝到/usr/share/initramfs-tools/scripts/local 文件的相同位置处。
这个位置在文件最后几行上面,最后结果,接着上面的这段后面是以下几行。
  1. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom"
  2.         run_scripts /scripts/local-bottom
  3.         [ "$quiet" != "y" ] && log_end_msg
  4. }
复制代码

该文件结束。

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

找到# util-linux,在其下插入以下几行:
  1. copy_exec /sbin/losetup /sbin
  2. copy_exec /sbin/kpartx /sbin
  3. copy_exec /sbin/shutdown /shutdown
  4. cp -a /sbin/fsck*  ${DESTDIR}/sbin/
  5. copy_exec /sbin/e2fsck /sbin
  6. touch ${DESTDIR}/etc/initrd-release
  7. touch ${DESTDIR}/version
复制代码

最后该处几个语句为
  1. # util-linux
  2. copy_exec /sbin/blkid /sbin
  3. copy_exec /sbin/losetup /sbin
  4. copy_exec /sbin/kpartx /sbin
  5. copy_exec /sbin/shutdown /shutdown
  6. cp -a /sbin/fsck*  ${DESTDIR}/sbin/
  7. copy_exec /sbin/e2fsck /sbin
  8. touch ${DESTDIR}/etc/initrd-release
  9. 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源码.
对他手工编译安装.
打开一个终端.进入该目录.依次执行以下命令:
  1. ./configure
  2. make
  3. 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 .

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

将以下拷贝覆盖原始内容即可。
  1. #!/bin/sh
  2. ##set -e
  3. ##case "${1}" in
  4. ##        prereqs)
  5. ##                exit 0
  6. ##                ;;
  7. ##esac

  8. if [ "${ROOTFSTYPE}" = ntfs ] || [ "${ROOTFSTYPE}" = ntfs-3g ] || \
  9.    [ "${LOOPFSTYPE}" = ntfs ] || [ "${LOOPFSTYPE}" = ntfs-3g ]
  10. then
  11.         mkdir -p /run/sendsigs.omit.d
  12.         pidof mount.ntfs >> /run/sendsigs.omit.d/ntfs-3g
  13.         pidof mount.ntfs-3g >> /run/sendsigs.omit.d/ntfs-3g
  14. fi
  15. #####################################################################
  16. ##the following maybe help to resolve the buffer I/O error problem
  17. ##when reboot or halt.
  18. #####################################################################

  19. if [ -d /run/initramfs -a -f /init ]
  20. then
  21.         mkdir -p /run/initramfs/dev /run/initramfs/host /run/initramfs/proc /run/initramfs/root /run/initramfs/run /run/initramfs/sys /run/initramfs/tmp
  22.         rm -rf   /lib/modules
  23.         for xxx in /*
  24.           do       
  25.         if [ ${xxx} = "/dev" -o ${xxx} = "/host" -o ${xxx} = "/proc" -o ${xxx} = "/root" -o ${xxx} = "/run" -o ${xxx} = "/sys" -o ${xxx} = "/tmp" ];
  26.         then
  27.                 :
  28.         else
  29.                 cp -a ${xxx} /run/initramfs/  1>/dev/null 2>&1;
  30.         fi
  31.         done
  32.         unset xxx
  33. fi
  34. ####################################################################
  35. exit 0
复制代码



6.生成initrd.img文件
  1. 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的菜单例子
  1. title VBUNTUFIX uuid-auto-probe
  2. find --set-root --ignore-floppies --ignore-cd /vbuntufix/vbuntufix.vhd
  3. uuid ()
  4. kernel /vbuntufix/vmlinuz  root=UUID=%?% vloop=/vbuntufix/vbuntufix.vhd vlooppart=p1
  5. initrd /vbuntufix/initrd.img
复制代码

grub2适用于UEFI与 BIOS,应用范围较广。
grub2自动探测UUID的菜单
  1. menuentry 'VBUNTUFIX linux' --class ubuntu --class gnu-linux --class gnu --class os {
  2.         recordfail
  3.         insmod gzio
  4.         insmod part_msdos
  5.         insmod part_gpt
  6.         insmod ext2
  7.         insmod ntfs
  8.         insmod probe
  9.         insmod search
  10.         search --no-floppy -f --set=aabbcc /vbuntufix/vbuntufix.vhd
  11.         set root=${aabbcc}
  12.         probe -u --set=ddeeff ${aabbcc}
  13.         linux        /vbuntufix/vmlinuz root=UUID=${ddeeff} vloop=/vbuntufix/vbuntufix.vhd vlooppart=p1
  14.         initrd        /vbuntufix/initrd.img
  15. }
复制代码

点评

用第4步的方法编译安装的修改版ntfs-3g有问题,挂载ntfs分区会出错,必须重新用官方版本覆盖安装ntfs-3g才能修复。测试环境:ubuntu 14.04.4  详情 回复 发表于 2016-3-6 14:34
这个方法适用于任何版本的Ubuntu吗  详情 回复 发表于 2014-8-18 20:06
好详细啊!学习学习!  详情 回复 发表于 2014-8-3 06:50
赞一个! 授人以鱼,不如授人以渔  发表于 2014-7-1 16:44
回复

使用道具 举报

推荐
 楼主| 发表于 2015-12-6 10:02:04 | 只看该作者
crown2kiss 发表于 2015-12-5 18:38
大神ubuntu是成功了,但是安装CentOS-7-x86_64-DVD-1503-01.iso这个系统,木有/lib/dracut/hooks/pre-mount ...

这个文件是自己制作dracut时候加入进去的阿.你需要把制作dracut命令的参数中的路径 /home/niumao/mydracut中的 niumao 更改为你自己的用户名.

点评

谢谢已经搞定centos7,单VHD文件就可以了,好厉害,不过ntfs文件不好挂载,特别是VHD所在分区  详情 回复 发表于 2015-12-7 10:18
回复

使用道具 举报

推荐
 楼主| 发表于 2016-4-6 21:13:41 | 只看该作者
可能是菜单中还有错误路径信息。应该是没有挂载好根分区。注意看看菜单各个文件的路径。
另外有时候需要检查一下local文件。有时候升级后会把一些修改丢失了。
看看以下菜单
  1. menuentry " UBUNTU-1604.vhd " --class  ubuntu {
  2.         insmod gzio
  3.         insmod part_msdos
  4.         insmod part_gpt
  5.         insmod ext2
  6.         insmod ntfs
  7.         insmod probe
  8.         set vhdfile="/ubt/UBUNTU-1604.vhd"
  9.         set root=(hd0,1)
  10.         search --no-floppy -f --set=aabbcc  $vhdfile
  11.         set root=${aabbcc}
  12.         probe -u --set=ddeeff ${aabbcc}
  13.         loopback loop0 $vhdfile
  14.         linux        (loop0,1)/vmlinuz root=/dev/sda5 rw  kloop=$vhdfile  kroot=/dev/mapper/loop0p1
  15.         initrd        (loop0,1)/initrd.img
  16. }
复制代码


可以修改标题 ,vhdfile的值为vhd文件的路径,loop0p1 (loop0,1)中的1表示第一个主分区,看你的vhd内分区酌情修改。

点评

我的是ubtkylin16.04内核4.4.0-22启动错误,做了好几次都不行,楼主能提供下启动文件吗?谢谢!!  详情 回复 发表于 2016-5-10 22:44
我的是ubtkylin16.04内核4.4.0-22启动错误,做了好几次都不行,楼主能提供下启动文件吗?谢谢!!  详情 回复 发表于 2016-5-10 22:44
我的是ubtkylin16.04内核4.4.0-22启动错误,做了好几次都不行,楼主能提供下启动文件吗?谢谢!!  详情 回复 发表于 2016-5-10 22:44
我的是ubtkylin16.04内核4.4.0-22启动错误,做了好几次都不行,楼主能提供下启动文件吗?谢谢!!  详情 回复 发表于 2016-5-10 22:44
我的是ubtkylin16.04内核4.4.0-22启动错误,做了好几次都不行,楼主能提供下启动文件吗?谢谢!!  详情 回复 发表于 2016-5-10 22:44
回复

使用道具 举报

推荐
 楼主| 发表于 2015-12-31 16:39:42 | 只看该作者

推荐一种grub2菜单写法

本帖最后由 2011niumao 于 2016-4-6 21:29 编辑

典型例子
  1. menuentry " UBUNTU-1604.vhd " --class  ubuntu {
  2.         insmod gzio
  3.         insmod part_msdos
  4.         insmod part_gpt
  5.         insmod ext2
  6.         insmod ntfs
  7.         insmod probe
  8.         set vhdfile="/ubt/UBUNTU-1604.vhd"
  9.         set root=(hd0,1)
  10.         search --no-floppy -f --set=aabbcc  $vhdfile
  11.         set root=${aabbcc}
  12.         probe -u --set=ddeeff ${aabbcc}
  13.         loopback loop0 $vhdfile
  14.         linux        (loop0,1)/vmlinuz root=/dev/sda5 rw  kloop=$vhdfile  kroot=/dev/mapper/loop0p1
  15.         initrd        (loop0,1)/initrd.img
复制代码
优点
1)设置了变量vhdfile ,可以使得三处的vhd文件统一使用该变量代替,便于修改和移植。
以后只需要修改变量 vhdfile的值就可以了。

2)使用loopback命令,引导文件在vhd文件内。这样只需要一个固定vhd文件。不用再手工把引导文件复制出来。
但是这个方法只适用于grub2 ,不适用grub4dos(除非vhd文件连续存放或碎片不超过32)。

注意这里要求 修改定制的可以引导固定vhd的 initrd.img要直接替换掉原先的/boot/initrd.img-XXXX-generic.

3)正常情况下升级后不需要修改引导菜单了。也不需要复制vmlinuz——XXXXX-geneic   initrd.img-XXXXX-generic出来了,

评分

参与人数 1无忧币 +1 收起 理由
Srainbow + 1 汗~~误点成反对了,+1无忧币,报歉。

查看全部评分

回复

使用道具 举报

推荐
发表于 2014-6-30 17:42:19 | 只看该作者
好,非常好。

不知道VBOX的方法能否用在VMWare上,准备把VMWare下的Linux做个VHD实机用。
回复

使用道具 举报

8#
发表于 2014-7-1 21:48:50 | 只看该作者
今天使用virtualbox安装了麒麟系统的vhd,用楼主提供的工具引导进入系统后,无法使用wifi,请问楼主制作ubuntu vhd时 wifi是如何设置的?
回复

使用道具 举报

9#
发表于 2014-7-17 23:50:35 | 只看该作者
牛教程。
回复

使用道具 举报

10#
发表于 2014-8-3 06:50:52 | 只看该作者
2011niumao 发表于 2014-6-29 15:37
UBUNTU制作可以引导VHD系统的initrd.img 的方法
http://pan.baidu.com/s/1xVvXG

好详细啊!学习学习!
回复

使用道具 举报

11#
发表于 2014-8-6 00:48:45 | 只看该作者
很有研究价值,谢谢楼主分享
回复

使用道具 举报

12#
发表于 2014-8-6 11:20:36 | 只看该作者
好好学习研究一下
支持楼主
支持论坛
回复

使用道具 举报

13#
发表于 2014-8-18 20:06:28 | 只看该作者
2011niumao 发表于 2014-6-29 15:37
UBUNTU制作可以引导VHD系统的initrd.img 的方法
http://pan.baidu.com/s/1xVvXG

这个方法适用于任何版本的Ubuntu吗

点评

LZ你好。我按照方法来做,,不能挂载根系统。。我是这样做的,以13.04为例:在vbox创建ubuntu1304.vhd,并在ubuntu13.04中按照lz的方法创建initrd.img-13.04,依然采用13.04的vmlinuz,,,使用这三个文件在grub2中引  详情 回复 发表于 2014-8-19 20:34
是的  发表于 2014-8-19 10:08
回复

使用道具 举报

14#
发表于 2014-8-19 20:34:29 | 只看该作者
mouxiaoyi 发表于 2014-8-18 20:06
这个方法适用于任何版本的Ubuntu吗

LZ你好。我按照方法来做,,不能挂载根系统。。我是这样做的,以13.04为例:在vbox创建ubuntu1304.vhd,并在ubuntu13.04中按照lz的方法创建initrd.img-13.04,依然采用13.04的vmlinuz,,,使用这三个文件在grub2中引导,,,这样做对不对。。。我对lz的理解有误吗。。。vhd配置问题?vmlinuz不应该使用系统的缺省内核?求解答。

QQ截图20140819202808.jpg (145.84 KB, 下载次数: 516)

QQ截图20140819202808.jpg

点评

在更新到最新的 ubuntu1404 中简单测试一下后,发现逻辑分区也许可以的。 所以你可以试试引导时候把vlooppart=p1 更改为 vlooppart=p5 也许就可以了。  详情 回复 发表于 2014-8-20 20:32
从图片看已经成功识别挂载vhd了。做法没有问题。 根分区没有挂载成功。 你的 vhd 文件内部的分区比较多,看样子是3个???如果有逻辑分区。似乎是不行的。 根分区是逻辑分区? 在引导时候grub2菜单界面按e,把v  详情 回复 发表于 2014-8-20 10:10
回复

使用道具 举报

15#
 楼主| 发表于 2014-8-20 10:10:06 | 只看该作者
mouxiaoyi 发表于 2014-8-19 20:34
LZ你好。我按照方法来做,,不能挂载根系统。。我是这样做的,以13.04为例:在vbox创建ubuntu1304.vhd,并 ...

从图片看已经成功识别挂载vhd了。做法没有问题。
根分区没有挂载成功。
你的 vhd 文件内部的分区比较多,看样子是3个???如果有逻辑分区。似乎是不行的。
根分区是逻辑分区?
在引导时候grub2菜单界面按e,把vlooppart=p1 改为 vlooppart=p5 试试看。
或者手动对vhd分区,保证都是主分区。

点评

两个,都是主分区,15.5G,510M  详情 回复 发表于 2014-8-20 11:06
回复

使用道具 举报

16#
发表于 2014-8-20 11:06:57 | 只看该作者
2011niumao 发表于 2014-8-20 10:10
从图片看已经成功识别挂载vhd了。做法没有问题。
根分区没有挂载成功。
你的 vhd 文件内部的分区比较多 ...

两个,都是主分区,15.5G,510M

点评

注意到照片中的两句: add map loop0p2 ..... add map loop0p5..... 所以vhd文件中有分区对应于 p2 p5.但是p5一般是逻辑分区(对于mbr的vhd)。 所以怀疑vhd文件中有逻辑分区。 正常情况应该是 add map loop0p1  详情 回复 发表于 2014-8-20 12:11
回复

使用道具 举报

17#
 楼主| 发表于 2014-8-20 12:11:13 | 只看该作者
mouxiaoyi 发表于 2014-8-20 11:06
两个,都是主分区,15.5G,510M

注意到照片中的两句:
add map loop0p2 .....
add map loop0p5.....
所以vhd文件中有分区对应于 p2 p5.但是p5一般是逻辑分区(对于mbr的vhd)。
所以怀疑vhd文件中有逻辑分区。
正常情况应该是
add map loop0p1 .....
add map loop0p2 .....

注意调整vlooppart参数使得他对应到vhd中主分区的序号。
回复

使用道具 举报

18#
 楼主| 发表于 2014-8-20 20:32:22 | 只看该作者
mouxiaoyi 发表于 2014-8-19 20:34
LZ你好。我按照方法来做,,不能挂载根系统。。我是这样做的,以13.04为例:在vbox创建ubuntu1304.vhd,并 ...

在更新到最新的 ubuntu1404 中简单测试一下后,发现逻辑分区也许可以的。
所以你可以试试引导时候把vlooppart=p1 更改为 vlooppart=p5  也许就可以了。
回复

使用道具 举报

19#
发表于 2014-8-21 19:12:17 | 只看该作者
看了楼主的另一篇文章,,把第三个文件init也修改了,然后成功了。
回复

使用道具 举报

20#
发表于 2014-9-2 09:53:22 | 只看该作者
本帖最后由 2011hjcjie 于 2014-9-2 09:56 编辑

新买笔记本,按以前台式机安装方法测试,启动失败(GPT)。
是否不支持 haswell平台的原因,(我新买的电脑CPU I7-4710mQ; 显卡 NVIDIA gtx880m)
---回复主题错误,请无视...
回复

使用道具 举报

21#
发表于 2014-9-25 12:01:17 | 只看该作者
楼主,按照你的GRUB4DOS菜单,好像找不到第二个分区下面的 archvhd/arch.vhd文件。


title Archlinux uuid-auto-probe
find --set-root --ignore-floppies --ignore-cd /archvhd/arch.vhd
uuid ()
kernel  /archvhd/vmlinuz-linux root=UUID=%?%  vloop=/archvhd/arch.vhd vlooppart=p2
initrd  /archvhd/initramfs-linux.img

IMG_20140924_195017.jpg (192.71 KB, 下载次数: 507)

VHD

VHD

点评

也可以把root=UUID=%?% 改为 root=/dev/sdax 这样的。 或者手工查出 UUID .用UUID的值替换掉 %?% 。  详情 回复 发表于 2014-9-25 12:43
菜单没有错阿。我这里用的很好的。 请检查菜单是否有拼写错误,文件 /archvhd/arch.vhd 路径是不是正确。 特别是会不会多一个空格。 我有几次多了一个=后面空格引导失败的情况。 最后可以考虑升级grub4dos  详情 回复 发表于 2014-9-25 12:40
回复

使用道具 举报

22#
 楼主| 发表于 2014-9-25 12:40:07 | 只看该作者
hulala 发表于 2014-9-25 12:01
楼主,按照你的GRUB4DOS菜单,好像找不到第二个分区下面的 archvhd/arch.vhd文件。

菜单没有错阿。我这里用的很好的。
请检查菜单是否有拼写错误,文件 /archvhd/arch.vhd 路径是不是正确。
特别是会不会多一个空格。
我有几次多了一个=后面空格引导失败的情况。

最后可以考虑升级grub4dos   把最新版grub4dos的grldr  grldr.mbr 拿来覆盖原来的同名文件即可。
回复

使用道具 举报

23#
 楼主| 发表于 2014-9-25 12:43:43 | 只看该作者
hulala 发表于 2014-9-25 12:01
楼主,按照你的GRUB4DOS菜单,好像找不到第二个分区下面的 archvhd/arch.vhd文件。

也可以把root=UUID=%?% 改为 root=/dev/sdax  这样的。
或者手工查出 UUID .用UUID的值替换掉 %?% 。

点评

用你的菜单,启动一次会看到UUID,然后重启用UUID的值填上,替换掉 %?%后可以启动了,是不是语句没有把得到UUID的值给到第4句?  详情 回复 发表于 2014-9-26 16:06
回复

使用道具 举报

24#
发表于 2014-9-26 16:06:31 | 只看该作者
2011niumao 发表于 2014-9-25 12:43
也可以把root=UUID=%?% 改为 root=/dev/sdax  这样的。
或者手工查出 UUID .用UUID的值替换掉 %?% 。

用你的菜单,启动一次会看到UUID,然后重启用UUID的值填上,替换掉 %?%后可以启动了,是不是语句没有把得到UUID的值给到第4句?

点评

成功就好。看不出什么原因。  详情 回复 发表于 2014-9-26 17:04
回复

使用道具 举报

25#
 楼主| 发表于 2014-9-26 17:04:27 | 只看该作者
本帖最后由 2011niumao 于 2014-9-26 17:06 编辑
hulala 发表于 2014-9-26 16:06
用你的菜单,启动一次会看到UUID,然后重启用UUID的值填上,替换掉 %?%后可以启动了,是不是语句没有把得 ...


成功就好。应该是你说的那样。
不过 看不出为什么传递不过来。
回复

使用道具 举报

26#
发表于 2014-11-24 22:13:30 | 只看该作者
Ubuntu升级到14.10,请问一下楼主制作方法有改变么
systemd在社区已经吵的沸沸扬扬的

点评

这里的制作方法已经是适用于 使用systemd的LINUX系统 的了 。所以不需要改变。 不过近期来感觉对固定大小VHD分区更好。 在WIN7 下制作好 mbr格式固定大小24G vhd,分为 320M fat32 EFI分区。2G SWAP分区。其余给  详情 回复 发表于 2014-11-25 08:45
回复

使用道具 举报

27#
 楼主| 发表于 2014-11-25 08:45:32 | 只看该作者
sherylynn 发表于 2014-11-24 22:13
Ubuntu升级到14.10,请问一下楼主制作方法有改变么
systemd在社区已经吵的沸沸扬扬的

这里的制作方法已经是适用于 使用systemd的LINUX系统 的了 。所以不需要改变。
不过近期来感觉对固定大小VHD分区更好。
在WIN7 下制作好 mbr格式固定大小24G vhd,分为
320M  fat32 EFI分区。2G SWAP分区。其余给 / 分区。
这样不至于空间紧张。
回复

使用道具 举报

28#
发表于 2014-12-12 15:02:45 | 只看该作者
为什么大神不出一个视频教程,逐步教大家安装细节,配合文字不是效果更好吗,我一直再用大神的方法做的VHD-ubuntu,并且配合大神给的启动器我编辑的启动菜单主题(不知发给大神的主题包有没有被采纳更新到新版的启动器里面),我把VHD系统迁移到了移动硬盘上,随处带随时用,又好看又方便啊,很多人看了也惊艳不已。

我最近有空不介意我帮忙录一个ubuntu的VHD制作教程吧,先做好你审核一下在发出来这样应该让很多尝试VHD-linux新手容易明白得多。

离开好久我又来了,其实我很想知道有没有可能启动子VHD呢,因为我每次进行稍大动作的修改,我都会回到windows将原本的vhd系统磁盘差分一个子磁盘,将子磁盘挂载启动到vmware(用vmware是因为Vbox好像不能启动子VHD所以用)里面在修改,就算失败也不影响我的原有系统使用,什么时候有修改就这样用,当然没事谁也不会老改系统,正常用不折腾也就不会不稳定,这样我稳定使用很久也不重装系统,有修改就用vmware试一下,但是vmware不能模拟显卡,所以我想如果能启动到差分磁盘我就可以大胆一点装独显驱动了,当然只是想知道是否有这个可能性和方法,毕竟很想装独显驱动,但是之前失败了几次,每次我都重装unity才没事,需求一般所以一直就集显了事,但是不知道这样的想法有没有可能啊。

点评

欢迎William叔叔回来. 你发的主题我很喜欢,感觉很炫.已经合并到新版的VHD系统和启动器(2014-12-06)中了. 链接见 http://pan.baidu.com/s/1hqopezq 制作好的有引导VHD功能的initrd.img的下载链接 http://pan.bai  详情 回复 发表于 2014-12-12 20:09
回复

使用道具 举报

29#
 楼主| 发表于 2014-12-12 20:09:57 | 只看该作者
William叔叔 发表于 2014-12-12 15:02
为什么大神不出一个视频教程,逐步教大家安装细节,配合文字不是效果更好吗,我一直再用大神的方法做的VHD- ...

欢迎William叔叔回来.
你发的主题我很喜欢,感觉很炫.已经合并到新版的VHD系统和启动器(2014-12-06)中了.
链接见
http://pan.baidu.com/s/1hqopezq
制作好的有引导VHD功能的initrd.img的下载链接
http://pan.baidu.com/s/1mgFi1Qg
没有制作视频是因为主要困难是UBUNTU系统的安装---这方面教程已经比较多了.
如果安装好了UBUNTU系统,那么制作有引导VHD功能的initrd应该就不难了.
也可以到上面第二个链接直接下载制作好的来使用,不用自己制作了.

当然欢迎你制作一个教学视频.审核谈不上,可以看看帮助补充完善也许没有问题.

显卡驱动问题一直比较难.不过最近UBUNTU更新很多.建议更新到最新的14041,内核版本
是今天刚刚更新的3.16.0-28.也可以在新立得里面手动安装.也许就不需要专有驱动了.
回复

使用道具 举报

30#
发表于 2014-12-13 13:44:31 | 只看该作者
为什么ubuntu的vhd都好大好大啊

点评

哦.只是设计的大了.如果设置小,例如8G左右,也没有问题. 但就只安装系统和一些简单软件了. 如果要求体积小,可以下载或自己制作LIVE系统.一般1G左右.  详情 回复 发表于 2014-12-13 13:49
回复

使用道具 举报

31#
 楼主| 发表于 2014-12-13 13:49:37 | 只看该作者
is286 发表于 2014-12-13 13:44
为什么ubuntu的vhd都好大好大啊

哦.只是设计的大了.如果设置小,例如8G左右,也没有问题.
但就只安装系统和一些简单软件了.
如果要求体积小,可以下载或自己制作LIVE系统.一般1G左右.
回复

使用道具 举报

32#
发表于 2015-1-2 21:04:21 | 只看该作者
安装LZ 的大法,我做了一个ubuntukylin 1404 的 VHD,有稍稍不成功。一是一定要把新定制的 ubkylin.vhd , initrd.img-3.16.0-23-generic , vmlinuz-3.16.0-23 等放到ubuntu 文件夹吗? 自定义一个ubkylin文件夹可以吗?
二是 VHD文件内一定要安装装kpartx,kpartx-boot,util-linux,dm-setup一些软件吗?

点评

二中kpartx kpartx-boot 是必须的.另外两个util-linux dm-setup 是不是必须没有仔细验证过.欢迎你测试后给出结论. 一当然不一定非要叫ubuntu了,可以更改为任意名字.只要手工编辑菜单,把文件的路径修改好就可以了.目  详情 回复 发表于 2015-1-2 22:26
回复

使用道具 举报

33#
 楼主| 发表于 2015-1-2 22:26:00 | 只看该作者
jxdeng 发表于 2015-1-2 21:04
安装LZ 的大法,我做了一个ubuntukylin 1404 的 VHD,有稍稍不成功。一是一定要把新定制的 ubkylin.vhd , i ...

二中kpartx kpartx-boot 是必须的.另外两个util-linux dm-setup 是不是必须没有仔细验证过.欢迎你测试后给出结论.
一当然不一定非要叫ubuntu了,可以更改为任意名字.只要手工编辑菜单,把文件的路径修改好就可以了.目录叫ubuntu主要是为了新手方便,不需要编辑菜单
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-27 21:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表