无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 2011niumao

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

    [复制链接]
发表于 2016-6-19 12:41:35 | 显示全部楼层
能不能实现不通过virtualbox安装ubuntu,而是直接安装到vhd中?

点评

当然可以。先在Win系统下准备一个新的固定大小的vhd,分好分区,推荐只分一个分区。 接着如同普通硬盘安装,启动到ubuntu的安装iso系统中,在该系统中利用 kpartx -av 命令把vhd挂到loop设备上,一般是/dev/mapper/  详情 回复 发表于 2016-6-21 10:37
当然可以。先在Win系统下准备一个新的固定大小的vhd,分好分区,推荐只分一个分区。 接着如同普通硬盘安装,启动到ubuntu的安装iso系统中,在该系统中利用 kpartx -av 命令把vhd挂到loop设备上,一般是/dev/mapper/  详情 回复 发表于 2016-6-21 10:37
回复

使用道具 举报

 楼主| 发表于 2016-6-21 10:37:17 | 显示全部楼层
lgstd 发表于 2016-6-19 12:41
能不能实现不通过virtualbox安装ubuntu,而是直接安装到vhd中?

当然可以。先在Win系统下准备一个新的固定大小的vhd,分好分区,推荐只分一个分区。
接着如同普通硬盘安装,启动到ubuntu的安装iso系统中,在该系统中利用 kpartx -av 命令把vhd挂到loop设备上,一般是/dev/mapper/loop1p1 .
接下来正常按装,但选择设备时候选择loop设备挂载根。至于引导,可以不安装或者选择引导设备是 /dev/loop1. 如果有出错就选择不安装grub引导器。也不设置 swap 。
安装完成后写好引导。再下载(第一楼KLOOP链接)个已经制作好的可以引导固定vhd的引导文件,两个,是vmlinuz-版本号 initrd.img-版本号 。使用他们引导进入vhd系统就可以了。

进入VHD以后可以自己制作最新版本的可以引导固定vhd的内核初始镜像文件。
回复

使用道具 举报

 楼主| 发表于 2016-6-21 10:37:23 | 显示全部楼层
lgstd 发表于 2016-6-19 12:41
能不能实现不通过virtualbox安装ubuntu,而是直接安装到vhd中?

当然可以。先在Win系统下准备一个新的固定大小的vhd,分好分区,推荐只分一个分区。
接着如同普通硬盘安装,启动到ubuntu的安装iso系统中,在该系统中利用 kpartx -av 命令把vhd挂到loop设备上,一般是/dev/mapper/loop1p1 .
接下来正常按装,但选择设备时候选择loop设备挂载根。至于引导,可以不安装或者选择引导设备是 /dev/loop1. 如果有出错就选择不安装grub引导器。也不设置 swap 。
安装完成后写好引导。再下载(第一楼KLOOP链接)个已经制作好的可以引导固定vhd的引导文件,两个,是vmlinuz-版本号 initrd.img-版本号 。使用他们引导进入vhd系统就可以了。

进入VHD以后可以自己制作最新版本的可以引导固定vhd的内核初始镜像文件。

点评

谢谢回复,我试试看!!!!!!  详情 回复 发表于 2016-6-21 14:33
谢谢回复,我试试看!!  详情 回复 发表于 2016-6-21 14:33
谢谢回复,我试试看  详情 回复 发表于 2016-6-21 14:33
谢谢回复,我试试看  详情 回复 发表于 2016-6-21 14:33
回复

使用道具 举报

发表于 2016-6-21 14:33:13 | 显示全部楼层
2011niumao 发表于 2016-6-21 10:37
当然可以。先在Win系统下准备一个新的固定大小的vhd,分好分区,推荐只分一个分区。
接着如同普通硬盘安 ...

谢谢回复,我试试看
回复

使用道具 举报

发表于 2016-6-21 14:33:19 | 显示全部楼层
2011niumao 发表于 2016-6-21 10:37
当然可以。先在Win系统下准备一个新的固定大小的vhd,分好分区,推荐只分一个分区。
接着如同普通硬盘安 ...

谢谢回复,我试试看
回复

使用道具 举报

发表于 2016-6-21 14:33:23 | 显示全部楼层
2011niumao 发表于 2016-6-21 10:37
当然可以。先在Win系统下准备一个新的固定大小的vhd,分好分区,推荐只分一个分区。
接着如同普通硬盘安 ...

谢谢回复,我试试看!!
回复

使用道具 举报

发表于 2016-6-21 14:33:28 | 显示全部楼层
2011niumao 发表于 2016-6-21 10:37
当然可以。先在Win系统下准备一个新的固定大小的vhd,分好分区,推荐只分一个分区。
接着如同普通硬盘安 ...

谢谢回复,我试试看!!!!!!
回复

使用道具 举报

发表于 2016-8-24 01:07:17 | 显示全部楼层
您的百度云链接访问不了了
回复

使用道具 举报

 楼主| 发表于 2016-8-26 21:24:38 | 显示全部楼层
本帖最后由 2011niumao 于 2016-8-26 21:26 编辑

https://pan.baidu.com/s/1pLJ9W3T

点评

失效了  详情 回复 发表于 2016-11-14 12:24
回复

使用道具 举报

发表于 2016-8-31 09:58:59 | 显示全部楼层
链接和附件都不能下载了
回复

使用道具 举报

发表于 2016-10-18 09:55:24 | 显示全部楼层
装个Linux Mint18试试,学习学习
回复

使用道具 举报

发表于 2016-10-19 20:36:39 | 显示全部楼层
下载了,解压缩好像有问题。
回复

使用道具 举报

发表于 2016-10-27 10:44:04 | 显示全部楼层
支持不支持ubuntu 最新版?
回复

使用道具 举报

发表于 2016-10-28 12:24:39 | 显示全部楼层
本人很感谢这位大师,在他提供的附件帮助下本人于16年10月28号成功制作基于UBUNTU14.04的VHD启动本人QQ2840390592欢迎讨论
回复

使用道具 举报

发表于 2016-11-14 12:24:36 | 显示全部楼层
2011niumao 发表于 2016-8-26 21:24
https://pan.baidu.com/s/1pLJ9W3T

失效了
回复

使用道具 举报

发表于 2016-11-16 13:40:16 | 显示全部楼层
@2011niumao,
使用ubuntu 16.04 制作的vhd

dmesg出错很多错误:
[ 7147.802795] blk_update_request: I/O error, dev loop0, sector 32577304
[ 7153.748500] blk_update_request: I/O error, dev loop0, sector 32533824
[ 7154.788273] blk_update_request: I/O error, dev loop0, sector 32533864
[ 7161.006307] blk_update_request: I/O error, dev loop0, sector 32358800
[ 7164.173713] blk_update_request: I/O error, dev loop0, sector 32577344
[ 7169.450030] blk_update_request: I/O error, dev loop0, sector 32533904
[ 7170.855654] blk_update_request: I/O error, dev loop0, sector 32577384
[ 7177.540130] blk_update_request: I/O error, dev loop0, sector 32358840
[ 7179.834922] blk_update_request: I/O error, dev loop0, sector 32577424
[ 7187.615629] blk_update_request: I/O error, dev loop0, sector 32358880


楼主能看下,怎么解决 这种问题吗?

点评

不会。目前看不影响使用,不用管它。  详情 回复 发表于 2016-11-16 16:03
回复

使用道具 举报

 楼主| 发表于 2016-11-16 16:03:59 | 显示全部楼层
Srainbow 发表于 2016-11-16 13:40
@2011niumao,
使用ubuntu 16.04 制作的vhd

不会。目前看不影响使用,不用管它。
回复

使用道具 举报

发表于 2016-12-15 15:28:15 | 显示全部楼层
说的好,一定回复~












蓝品盾卫浴扶手
回复

使用道具 举报

发表于 2016-12-15 17:48:37 | 显示全部楼层
有没有简单点的?这个引导的系统菜单我是看不懂!
回复

使用道具 举报

发表于 2017-1-16 08:01:30 | 显示全部楼层
大神,有没有可能支持android?

点评

android与linux差别太大,应该做不到了。但是android有类似于ubuntu的live系统的做法,也不需要vhd吧。  详情 回复 发表于 2017-1-16 11:57
回复

使用道具 举报

 楼主| 发表于 2017-1-16 11:57:51 | 显示全部楼层
aoqy 发表于 2017-1-16 08:01
大神,有没有可能支持android?

android与linux差别太大,应该做不到了。但是android有类似于ubuntu的live系统的做法,也不需要vhd吧。
回复

使用道具 举报

发表于 2017-1-16 16:34:54 | 显示全部楼层
2011niumao 发表于 2017-1-16 11:57
android与linux差别太大,应该做不到了。但是android有类似于ubuntu的live系统的做法,也不需要vhd吧。

技术上如果能做到,倒是有LIVE系统不可比拟的一些好处,例如:重启可以保留状态,另外不同的系统可以在同一个U盘中。

点评

到这里http://www.phoenixos.com/download 下载一个凤凰系统,其实就是安卓系统,exe格式的,安装很简单,装完会自动添加启动菜单, 对PC兼容很好,驱动很全,我的联想本装完,声、显、网卡Wifi都自动驱动了  详情 回复 发表于 2017-1-17 09:34
回复

使用道具 举报

 楼主| 发表于 2017-1-16 20:36:21 | 显示全部楼层
本帖最后由 2011niumao 于 2017-1-17 20:30 编辑

发布两个ISO,  就是把live系统制作成iso文件了。请到一楼第一个链接下载。
有基于ghostplant简化的ubuntu1604版本和完整ubuntu1604两种版本。
用户名密码,root密码都是ubuntu .
UBT-small.iso文件系统与vhd squashfs系统一致,都是ubuntu-1604,更新到最新(4.4.0-59)。
        用户名 密码 root密码都是ubuntu。        有如下用法:

1.        可以直接从VirtualBox启动,并且可以EFI启动和传统bios-mbr启动。

2.        可以和发行版live-cd一样通过grub4dos,grub2启动
        (需要把casper/initrd.img casper/vmlinuz先提取出来 )。

3.        可以把ISO文件放到/grub/IMGS目录下,利用网友制作的自动ISO菜单直接启动
        (只限于grub4dos启动)。

4.        启动后可以使用主目录的UCloner中的UCloner_CN或UCloner_EN(双击),
        依照提示操作,将/cdrom/casper/中的文件UBT-small.squashfs 恢复到硬盘分区。

5.        也可以预先在WINDOWS系统下准备好一个固定大小的vhd虚拟磁盘,
        例如名字为UBT-small.vhd,
        进行初始化和建立一个分区,格式化并将其标记为活动分区。
        (右键我的电脑--管理--创建vhd--初始化--建立简单卷--标记为活动分区)

        再启动到UBT-small的ISO系统(或live系统)中,打开一个终端,进入到vhd文件所在目录,
        运行
        sudo kpartx -av UBT-small.vhd
        记住其显示的输出,里面有类似于 /dev/mapper/loop2p1 型字段。

        图形界面打开主目录的UCloner子目录,双击UCloner_CN(UCloner_EN),
        依提示操作,将/cdrom/casper/中文件UBT-small.squashfs恢复到某个固定大小VHD硬盘的分区,
        此时弹出对话框中 / 分区手动填写,如 /dev/mapper/loop2p1(与kpartx命令的输出一致) .
        文件系统手动填写ext4 ,其他空白。然后一直下一步或输入y回车让其恢复系统。

        注意,grub2应该空白,等待系统恢复完毕以后再手动安装。
        安装grub2的参考命令:
        sudo mount /dev/mapper/loop2p1 /mnt
        sudo grub-install  --root-directory=/mnt  /dev/loop2
回复

使用道具 举报

发表于 2017-1-17 09:34:57 | 显示全部楼层
aoqy 发表于 2017-1-16 16:34
技术上如果能做到,倒是有LIVE系统不可比拟的一些好处,例如:重启可以保留状态,另外不同的系统可以在同 ...

到这里http://www.phoenixos.com/download
下载一个凤凰系统,其实就是安卓系统,exe格式的,安装很简单,装完会自动添加启动菜单,

对PC兼容很好,驱动很全,我的联想本装完,声、显、网卡Wifi都自动驱动了
回复

使用道具 举报

发表于 2017-1-17 12:48:18 | 显示全部楼层
试试看吧
回复

使用道具 举报

 楼主| 发表于 2017-1-18 10:44:26 | 显示全部楼层
grub2有一个命令 loopback 可以满足只用一个VHD文件的要求。一个菜单样式
  1. menuentry " UBT-small.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/UBT-small.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=UUID=${ddeeff} rw  kloop=$vhdfile  kroot=/dev/mapper/loop0p1
  15.         initrd        (loop0,1)/initrd.img
  16. }  
复制代码
对于不分区的img文件,(loop0,1)应该改用(loop0)。
回复

使用道具 举报

发表于 2017-1-19 12:46:17 | 显示全部楼层
不错的说,学习了。。。。
回复

使用道具 举报

 楼主| 发表于 2017-1-22 10:51:28 | 显示全部楼层
alanyih 发表于 2017-1-21 17:10
This seems to work!
"reboot.pro/topic/20603-linux-from-vhd-how-to/page-3#entry201757"


the original local-file has a mistaken,  the sentence  “if [ -z "$kloop" ]; then"  is placed in the front of the function local_mount_root().  It should be  placed after the sentence "local_premount" of the function  local_mount_root(),  like such
  1. local_mount_root()
  2. {
  3.         local_top
  4.         local_device_setup "${ROOT}" root
  5.         ROOT="${DEV}"

  6.         # Get the root filesystem type if not set
  7.         if [ -z "${ROOTFSTYPE}" ]; then
  8.                 FSTYPE=$(get_fstype "${ROOT}")
  9.         else
  10.                 FSTYPE=${ROOTFSTYPE}
  11.         fi

  12.         local_premount

  13. if [ -z "$kloop" ]; then
  14. ........
复制代码
All is OK.
回复

使用道具 举报

 楼主| 发表于 2017-1-22 10:55:54 | 显示全部楼层
本帖最后由 2011niumao 于 2017-1-22 11:00 编辑

The new local_mount_root() in the file /usr/share/initramfs-tools/scripts/local :
  1. local_mount_root()
  2. {
  3.         local_top
  4.         local_device_setup "${ROOT}" root
  5.         ROOT="${DEV}"

  6.         # Get the root filesystem type if not set
  7.         if [ -z "${ROOTFSTYPE}" ]; then
  8.                 FSTYPE=$(get_fstype "${ROOT}")
  9.         else
  10.                 FSTYPE=${ROOTFSTYPE}
  11.         fi

  12.         local_premount

  13. if [ -z "$kloop" ]; then

  14.         if [ "${readonly}" = "y" ] && \
  15.            [ -z "$LOOP" ]; then
  16.                 roflag=-r
  17.         else
  18.                 roflag=-w
  19.         fi

  20.         # FIXME This has no error checking
  21.         [ -n "${FSTYPE}" ] && modprobe ${FSTYPE}

  22.         checkfs ${ROOT} root

  23.         # FIXME This has no error checking
  24.         # Mount root
  25.         mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
  26.         mountroot_status="$?"
  27.         if [ "$LOOP" ]; then
  28.                 if [ "$mountroot_status" != 0 ]; then
  29.                         if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then
  30.                                 panic "
  31. Could not mount the partition ${ROOT}.
  32. This could also happen if the file system is not clean because of an operating
  33. system crash, an interrupted boot process, an improper shutdown, or unplugging
  34. of a removable device without first unmounting or ejecting it.  To fix this,
  35. simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then
  36. gracefully shut down and reboot back into Windows. After this you should be
  37. able to reboot again and resume the installation.
  38. (filesystem = ${FSTYPE}, error code = $mountroot_status)
  39. "
  40.                         fi
  41.                 fi
  42.        
  43.                 mkdir -p /host
  44.                 mount -o move ${rootmnt} /host

  45.                 while [ ! -e "/host/${LOOP#/}" ]; do
  46.                         panic "ALERT!  /host/${LOOP#/} does not exist.  Dropping to a shell!"
  47.                 done

  48.                 # Get the loop filesystem type if not set
  49.                 if [ -z "${LOOPFSTYPE}" ]; then
  50.                         eval $(fstype < "/host/${LOOP#/}")
  51.                 else
  52.                         FSTYPE="${LOOPFSTYPE}"
  53.                 fi
  54.                 if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then
  55.                         FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}")
  56.                         [ -z "$FSTYPE" ] && FSTYPE="unknown"
  57.                 fi

  58.                 if [ ${readonly} = y ]; then
  59.                         roflag=-r
  60.                 else
  61.                         roflag=-w
  62.                 fi

  63.                 # FIXME This has no error checking
  64.                 modprobe loop
  65.                 modprobe ${FSTYPE}

  66.                 # FIXME This has no error checking
  67.                 mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt}

  68.                 if [ -d ${rootmnt}/host ]; then
  69.                         mount -o move /host ${rootmnt}/host
  70.                 fi
  71.         fi

  72. fi

  73.         ##############################################
  74.         #                  kloop by niumao            #
  75.         ##############################################

  76. if [ -n "$kloop" ]; then

  77.         ### reset the value of the root variable
  78.         HOSTDEV="${ROOT}"
  79.         NEWROOT="${rootmnt}"
  80.         [ -n "$kroot" ] && ROOT="$kroot"
  81.         [ -n "$kroot" ] || ROOT="/dev/loop0"
  82.         export ROOT
  83.         realroot="$ROOT"
  84.        
  85.         ###  auto probe the fs-type of the partition in which vhd-file live and mount it  /host
  86.         mkdir -p /host
  87.         if [ -z "$hostfstype" ]; then
  88.                 hostfstype="$(blkid -s TYPE -o value "${HOSTDEV}")"
  89.                 [ -z "$hostfstype"  -o "${hostfstype}" = "ntfs" ] && hostfstype="ntfs-3g"
  90.         fi
  91.         [ "${hostfstype}" = "ntfs-3g" ] || modprobe ${hostfstype}
  92.         mount -t ${hostfstype} -o rw  ${HOSTDEV}  /host
  93.        
  94.         ### mount the vhd-file on a loop-device
  95.         if [ "${kloop#/}" !=  "${kloop}" ]; then              
  96.                 modprobe  loop  
  97.                 kpartx -av /host$kloop
  98.                 [ -e "$realroot" ] || sleep 3
  99.         fi

  100.         ### probe lvm on vhd-file
  101.         if [ -n "$klvm" ];  then
  102.                 modprobe dm-mod
  103.                 vgscan
  104.                 vgchange  -ay  $klvm
  105.                 [ -e "$realroot" ] ||  sleep 3
  106.         fi

  107.         if [ "${readonly}" = "y" ] ; then
  108.                 roflag="-r"
  109.         else
  110.                 roflag="-w"
  111.         fi
  112.          
  113.         ### mount the realroot / in vhd-file on $NEWROOT
  114.         if [ -z "${kloopfstype}" ]; then
  115.                 kloopfstype="$(blkid -s TYPE -o value "$realroot")"
  116.                 [ -z "${kloopfstype}" ] && kloopfstype="ext4"
  117.         fi
  118.         [ -e "$realroot" ] || sleep 3
  119.         mount    ${roflag} -t "${kloopfstype}"  $realroot $NEWROOT
  120.        
  121.         ### mount /host in initrd to /host of the realrootfs
  122.         if [  "${hosthidden}" != "y" ] ; then
  123.                 [ -d "${NEWROOT}"/host ] || mkdir -p ${NEWROOT}/host
  124.                 mount --move /host   ${NEWROOT}/host
  125.         fi
  126. fi

  127.         ##############################################
  128.         #          kloop by niumao ended           #
  129.         ##############################################

  130. }
复制代码
  
回复

使用道具 举报

 楼主| 发表于 2017-2-19 12:05:14 | 显示全部楼层

引导squashfs的Fedora ARCH Mageia opensuse

本帖最后由 2011niumao 于 2017-2-19 12:07 编辑

发布一个可以引导squashfs只读文件系统的新版kloop,下载一楼链接里面mydracut-squashfs.zip。里面有使用说明。
本版加入了一种新的引导模式,用来引导squashfs只读文件系统。(使用了overlay机制)
方法与KLOOP的方法一样,还是分为两步。
第一步,编译安装修改过的ntfs-3g。
(不修改则无法防止关机时候在卸载根设备前先卸载根设备文件所在的底层分区)。
第二步,制作内存镜像盘initrd 或initramfs。做法与KLOOP一样。
制作好后将其改名(例如initrd-fedora),与vmlinuz-XXXX(改名为vmlinuz-feodra)与squashfs文件
(例如 Fedora25.squashfs)放在同一个目录(例如casper1)下。


引导菜单,引导时候只需要root 与squashfs两个参数,root的值是squashfs文件所在分区,
squashfs的值是squashfs文件的带路径的名字。例子:

grub4dos菜单:
title 启动LIVE-Fedora
find --set-root --ignore-floppies --ignore-cd  /casper1/vmlinuz-fedora
uuid ()
kernel /casper1/vmlinuz-fedora root=UUID=%?% squashfs=/casper1/Fedora25.squashfs
initrd  /casper1/initrd-fedora

grub2菜单:
menuentry "live-Fedora "  --class fedora  {
        insmod gzio
        insmod part_msdos
        insmod part_gpt
        insmod ext2
        insmod ntfs
        insmod probe
        set sfsfile="/casper1/Fedora25.squashfs"
        set root=(hd0,1)
        search --no-floppy -f --set=aabbcc  $sfsfile
        set root=${aabbcc}
        probe -u --set=ddeeff ${aabbcc}
        linux        /casper1/vmlinuz-fedora   root=UUID=${ddeeff} squashfs=$sfsfile  rw nompath nodmraid
        initrd        /casper1/initrd-fedora

附录===备份现有linux系统为squashfs系统的命令与恢复命令
需要linux系统安装好squashfs-tool,以及rsync。以Fedora25为例子。假设根设备为/dev/sda12。备份feodra25到/dev/sda9的目录casper1下,备份名字为Fedora25.squashfs。
su
cd /tmp
mkdir mm tt
mount /dev/sda12 mm
mount /dev/sda9 tt
mksquashfs mm tt/casper1/Fedora25.squashfs -b 262144 -comp xz -e tmp/mm tmp/tt

恢复命令
假设启动到了squashfs系统中后,要把Fedora25.squashfs恢复到硬盘/dev/sda12中,可以如下操作:
su
cd /tmp
mkdir mm tt
mount /host/casper1/Fedora25.squashfs mm
mount /dev/sda12 tt
rsync -SHav  mm/*  tt/
等恢复完毕后再通过修改grub4dos的menu.lst或grub2的菜单来设置引导即可。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-18 18:29

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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