无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站数据恢复、数据保护、视频编辑
Win To Go 极致利器(IXUNCIS固态U盘)无忧启动网成立20周年!广告联系 QQ:184822951 微信:wuyouceo
楼主: 2011niumao

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

    [复制链接]
发表于 2015-1-20 18:43:29 | 显示全部楼层
本帖最后由 jxdeng 于 2015-1-20 18:45 编辑

报告了坏消息,今天报告好消息,用LZ最新的内核版本dracut-fedora ,在centOS6.6 上测试,成功启动到图形界面。/sbin/init过程报错不少。显卡驱动有稍稍问题。看来,kpartx 是个好工具。 只能说 suse svr 11 是另类。 还需要继续努力。

点评

非常感谢测试与反馈. 有一点请留意一下.kpartx命令似乎只限于UBUNTU.其他LINUX 如 fedora arch opensuse 都是使用partx 命令. 很奇怪.感觉是UBUNTU比较独立,刻意与其他LINUX保持距离, 手工编译ntfs-3g目的是防  详情 回复 发表于 2015-1-20 22:54
回复

使用道具 举报

发表于 2015-1-20 18:46:13 | 显示全部楼层
本帖最后由 jxdeng 于 2015-1-20 18:51 编辑
2011niumao 发表于 2015-1-19 20:18
感谢测试与反馈。看来还是原配好,捆绑不成夫妻。
能启动到命令行界面 ,按理就是成功了。
不能进入 ...


是不是一定进行1. 系统原来的ntfs-3g 不行吗? 我试着做 ntfs-3g 的make ,好像缺makefile文件。
回复

使用道具 举报

 楼主| 发表于 2015-1-20 22:54:37 | 显示全部楼层
jxdeng 发表于 2015-1-20 18:43
报告了坏消息,今天报告好消息,用LZ最新的内核版本dracut-fedora ,在centOS6.6 上测试,成功启动到图形界 ...

非常感谢测试与反馈. 有一点请留意一下.kpartx命令似乎只限于UBUNTU.其他LINUX  如 fedora arch opensuse 都是使用partx 命令.
很奇怪.感觉是UBUNTU比较独立,刻意与其他LINUX保持距离,

手工编译ntfs-3g目的是防止关机出现 buffer I/O 错误.
如果不做的话,引导进入系统是可以的,但是关机时候会出错.再开机要做磁盘检查.
主要是关机时候会最后卸载根目录而先卸载 /host ,但根目录在vhd上,vhd在 /host设备上.会有冲突
这是过去的经验了.现在不知会如何呢.
回复

使用道具 举报

 楼主| 发表于 2015-1-22 17:11:46 | 显示全部楼层
本帖最后由 2011niumao 于 2015-2-15 11:38 编辑

重新完善了一下作为hook脚本的05-vhdmount.sh文件。
最新版05-vhdmount.sh的代码如下.这个是最终版吧.原来有很多bug,反复测试才定下来.
版权声明:本段代码为楼主原创.唯一首发在无忧启动论坛.
如果需要使用或者引用,请保留注释中 by niumao 的完整字段并应对无忧启动论坛表示以感谢.
  1.         ########################################################################
  2.         ###                 BOOT FROM VHD, VLOOP by niumao                   ###
  3.         ########################################################################

  4.         VLOOP=$(getarg vloop=)
  5.         VLOOPPART=$(getarg vlooppart=)
  6.         VLOOPFSTYPE=$(getarg vloopfstype=)
  7.         HOSTFSTYPE=$(getarg hostfstype=)

  8.         export VLOOP
  9.         export VLOOPPART
  10.         export VLOOPFSTYPE
  11.         export HOSTFSTYPE

  12.         if [ -n "$VLOOP" ]; then
  13.        
  14.                 ### reset the value of the root variable
  15.                 HOSTDEV="${root#block:}"
  16.                 [ -n "$VLOOPPART" ]  ||  root=/dev/loop0
  17.                 [ -n "$VLOOPPART" ]  &&  root=/dev/mapper/loop0$VLOOPPART
  18.                 export  root
  19.                 realroot="$root"
  20.                 if ismounted "$NEWROOT"; then
  21.                         umount    "$NEWROOT"
  22.                 fi
  23.                   
  24.                 ###  auto probe the fs-type of the partition in which vhd-file live and mount it  /host
  25.                 mkdir -p /host
  26.                 if  [  -z "${HOSTFSTYPE}"  ]; then
  27.                         HOSTFSTYPE="$(blkid -s TYPE -o value "$HOSTDEV")"
  28.                         [  -z "${HOSTFSTYPE}" -o  "${HOSTFSTYPE}" = "ntfs" ] && HOSTFSTYPE="ntfs-3g"
  29.                 fi
  30.                 mount -t "${HOSTFSTYPE}" -o rw   "${HOSTDEV}"    /host
  31.            
  32.                 ### mount the vhd-file on a loop-device
  33.                 if [ "${VLOOP#/}" != "${VLOOP}" ]; then
  34.                         modprobe loop
  35.                         kpartx -av  "/host$VLOOP"
  36.                         [ -e "$realroot" ] ||  sleep 3
  37.                 fi
  38.            
  39.                 ### mount the realroot / in vhd-file on $NEWROOT
  40.                 [ -e "$realroot" ] ||  sleep 3
  41.                 if  [  -z  "${VLOOPFSTYPE}"   ];  then
  42.                         VLOOPFSTYPE="$(blkid -s TYPE -o value "$realroot")"
  43.                         [ -z "${VLOOPFSTYPE}" ] && VLOOPFSTYPE="ext4"
  44.                 fi
  45.                 mount  -t  "${VLOOPFSTYPE}"   -o   rw   $realroot    $NEWROOT
  46.            
  47.                 ### mount /host in initrd to /host of the realrootfs
  48.                 [ -d $NEWROOT/host ] || mkdir -p $NEWROOT/host
  49.                 mount -R  /host  $NEWROOT/host
  50.                
  51.         fi

  52.         ########################################################################
  53.         ###                 End,  BOOT FROM VHD, VLOOP by niumao             ###
  54.         ########################################################################
复制代码

点评

关于其他格式虚拟硬盘的一点思考 这里提供的方法,例如 UBUNTU 改写local脚本 ,ARCH改写 init 脚本 ;而fedora opensuse mageia使用dracut的LINUX发行版则使用 插入一个hook脚本,就是 05-vhdmount.sh 到挂载真实根目  详情 回复 发表于 2015-1-24 13:28
回复

使用道具 举报

发表于 2015-1-22 20:04:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2015-1-24 13:28:39 | 显示全部楼层

能挂载必能引导!!!

本帖最后由 2011niumao 于 2015-1-28 11:07 编辑

关于其他格式虚拟硬盘的一点思考
这里提供的方法,
例如 UBUNTU 改写local脚本 ,ARCH改写 init 脚本 ;而fedora opensuse mageia使用dracut的LINUX发行版则使用 插入一个hook脚本,就是 05-vhdmount.sh 到挂载真实根目录之前的流程中.
应该是适合于其他虚拟格式的虚拟硬盘.

例如 raw格式===可以直接使用这里的方法和制作好的initrd等引导. 因为本质上固定大小vhd就是raw格式,再在末尾附加了一个扇区而已.
例如 img格式===模拟的是一个分区,而不是一个硬盘.或者说 img文件内部不能再分区.
只需要把mount 文件 到loop设备 这个阶段中的 partx 那一句删除,   mount 真实根分区到 $NEWROOT 阶段中的 mount语句 改成
  1. mount -t $VLOOPFSTYPE -o  loop,ro   $realroot $NEWROOT
复制代码
就可以吧?当然只是猜测,逻辑上是对的.实际实现可能需要调整. 比如启动参数中vloop调整为loop , vlooppart舍弃===因为img不分区,没有分区选择了.

注释 img格式虚拟硬盘的引导问题,UBUNTU与ARCH已经解决,UBUNTU就是WUBI方式安装.其代码在local脚本中是 if [ "LOOP"] ... if 这一段.正在 if [ "VLOOP" ] ... if代码上面.实际上VLOOP这一段代码就是模仿LOOP,也就是WUBI,来实现的.所以这里引导固定大小VHD的方法实际上也就是一种新的WUBI模式而已.而ARCHLINUX的img格式引导,则有carbonjiao给出了一个解决,使用的是hook.详情可百度.这里提倡修改init的方法实现img格式的引导,也是一种简便的思路.

例如 qcow2格式===这里的挂载命令不适合.但在网络上查到了直接在LINUX内挂载qcow2虚拟硬盘的命令.应该也是可以的.
只需要把所需要的dracut模块 ,内核驱动 二进制命令文件 相应的hook脚本塞入到dracut内部就行了.
总之一句话:能在LINUX系统内部挂载的虚拟硬盘格式,一定能引导. 能挂载必能引导。
回复

使用道具 举报

发表于 2015-2-1 14:46:22 | 显示全部楼层
最近没时间测试LZ的成果,今天测了一下 1月21日的版本,用dracut-fedora 成功启动redhat ent svr 6.4 。证实了LZ的“能挂必能引”的结论。但还是在引导过程中有BUG,在Starting Switch Root... 时报错。
我查了一下,报:Specified switch root patn /sysroot does not seem to be an OS tree,os-release file is missing 。
initrd-switch-root-service:main process exited. 看来通用性上 还有些问题。
不过,好的消息是,用命令: systemctl switch-root /sysroot /sbin/init .可强制进入VHD_LINUX. 图像界面也能起来。

点评

很好的测试消息.感谢jxdeng.真不敢想像fedora能带起来图形界面. 至于那个错误,应该不是很严重.只是缺少一个标志文件而已. 估计systemd要求在 /etc/下面有一个文件,名字为 os-release .自己可以建立一个.内容为空即  详情 回复 发表于 2015-2-1 17:08
回复

使用道具 举报

 楼主| 发表于 2015-2-1 17:08:15 | 显示全部楼层
本帖最后由 2011niumao 于 2015-2-2 12:11 编辑
jxdeng 发表于 2015-2-1 14:46
最近没时间测试LZ的成果,今天测了一下 1月21日的版本,用dracut-fedora 成功启动redhat ent svr 6.4 。证 ...
很好的测试消息.感谢jxdeng.真不敢想像fedora能带起来图形界面.
至于那个错误,应该不是很严重.只是缺少一个标志文件而已.
估计systemd要求linux-vhd系统在 /etc/下面有一个文件,名字为 os-release .自己可以建立一个.内容为空即可.例如
  1. sudo touch /etc/os-release
复制代码
有了这个,systemd 就知道它引导的是一个linux系统.就可以通过了.
回复

使用道具 举报

发表于 2015-2-2 10:27:53 | 显示全部楼层
很牛的教程,支持一个
回复

使用道具 举报

发表于 2015-2-2 12:21:01 | 显示全部楼层
hi,不知道对于想使用uefi启动安装linux的vhd如何做?

点评

在引导时,使用LZ 的 grubefi 。其它的都是一样的。  详情 回复 发表于 2015-2-2 12:51
回复

使用道具 举报

发表于 2015-2-2 12:51:07 | 显示全部楼层
东风唯笑 发表于 2015-2-2 12:21
hi,不知道对于想使用uefi启动安装linux的vhd如何做?

在引导时,使用LZ 的 grubefi 。其它的都是一样的。
回复

使用道具 举报

发表于 2015-2-2 13:11:27 | 显示全部楼层
本帖最后由 jxdeng 于 2015-2-2 14:22 编辑

     恭喜LZ, 我把Fedora 21 的 os-release 文件copy 一份到redhat ent svr 6.4 的/etc 下(它本身没有该文件!)。重启,一路顺畅,直到 login : 完美了。
    但你的脚步还需要改进。我再测试redhat ent svr  5.8 时,使用的是 LV 。在启动时找不到 /sysroot 。或者这个 vlooppart=p? 不好定义。手动敲 parx -av /host/redhat/redhat5.vhd 时 正常。但是敲 mount -t ext4 -o rw /dev/loop0? /sysroot 时, 报 can't find ext4 filesystem . 不知裸设备 LV 的 怎样挂载? 我的分区是:
part /boot --fstype ext3 --size=100
part pv.2 --size=0 --grow
volgroup vg_sys --pesize=32768 pv.2
logvol swap --fstype swap --name=lv_swap --vgname=vg_sys --size=1000
logvol / --fstype ext3 --name=lv_root --vgname=vg_sys --size=1000
logvol /tmp --fstype ext3 --name=lv_tmp --vgname=vg_sys --size=400
logvol /var --fstype ext3 --name=lv_var --vgname=vg_sys --size=2000
logvol /usr --fstype ext3 --name=lv_usr --vgname=vg_sys --size=800
logvol /oracle --fstype ext3 --name=lv_oracle --vgname=vg_sys --size=2400
logvol /home/appc --fstype ext3 --name=lv_topsic --vgname=vg_sys --size=2000

望LZ研究一把。

点评

ggggggggggggggggggggggggggggg  详情 回复 发表于 2015-2-8 18:26
总算完美了.应该是同喜阿.呵呵.至于LV ,没有接触过.准备学学.恐怕要较长时间了. 不过方法不变,就是先在linux系统里面挂载,能成功挂载就想办法把所需要的文件加入到initrd或者dracut里面. 另外就是注意挂载成功以后  详情 回复 发表于 2015-2-2 18:50
回复

使用道具 举报

发表于 2015-2-2 16:25:03 | 显示全部楼层
很牛的教程{:soso_e119:}
回复

使用道具 举报

 楼主| 发表于 2015-2-2 18:50:35 | 显示全部楼层
本帖最后由 2011niumao 于 2015-2-2 20:25 编辑
jxdeng 发表于 2015-2-2 13:11
恭喜LZ, 我把Fedora 21 的 os-release 文件copy 一份到redhat ent svr 6.4 的/etc 下(它本身没有该 ...


总算完美了.应该是同喜阿.呵呵.至于LV ,没有接触过.准备学学.恐怕要较长时间了.
不过方法不变,就是先在真实的 linux系统 里面挂载,能成功挂载就想办法把所需要的文件加入到initrd或者dracut里面.
另外就是注意挂载成功以后根分区的名字?或是路径?指的是在/dev/下的根分区的名字.这个有可能是 /dev/loop0px  但也有可能是其他名字.
这样可能需要再改动05-vhdmount.sh文件才行.因为那里面根分区是写死了的(硬编码),是/dev/loop0px类型.
还有:你敲入的mount命令 -t ext4 应该是 -t ext3 吧?因为后面分区信息全是 ext3,没有ext4 .根分区也是ext3.

点评

还有:你敲入的mount命令 -t ext4 应该是 -t ext3 吧?因为后面分区信息全是 ext3,没有ext4 .根分区也是ext3 ====================================================================跟上面没关系,ext3/4 都不行。 e  详情 回复 发表于 2015-2-3 16:40
回复

使用道具 举报

发表于 2015-2-3 16:40:07 | 显示全部楼层
2011niumao 发表于 2015-2-2 18:50
总算完美了.应该是同喜阿.呵呵.至于LV ,没有接触过.准备学学.恐怕要较长时间了.
不过方法不变,就是先 ...

还有:你敲入的mount命令 -t ext4 应该是 -t ext3 吧?因为后面分区信息全是 ext3,没有ext4 .根分区也是ext3
====================================================================跟上面没关系,ext3/4 都不行。 ext3/4 都是建在LV 上的。在脚本中需要先挂载 LV (我的是 /dev/sda2 ),这是关键,然后是 mount 文件系统,如 ext3/4 。 你的脚本只需判断一下,是 文件系统,直接 mount , 是LV 先挂LV,再mount 文件系统。可试试。

点评

请教一个问题.比如,现在你在一个真实linux系统中.另一个硬盘或者分区上有一个 LVM. 怎么识别出这个LVM, 并且挂载其中某个逻辑卷到一个指定目录上呢? 能否把命令都写出来看看.我是刚刚学习,对于LVM 没有感觉.  详情 回复 发表于 2015-2-3 18:30
道理是这样.可是一个不知道判断命令和挂载LVM的命令.是不是mount就可以呢.还有root变量的值需要更改一下. 所以还不好下手. 另外,我怀疑Fedora本身就有从LVM启动的功能的,好象从一个网友的提问看出来的,就是 Fedo  详情 回复 发表于 2015-2-3 18:22
回复

使用道具 举报

发表于 2015-2-3 16:47:51 | 显示全部楼层
本帖最后由 jxdeng 于 2015-2-3 17:54 编辑

      奇怪 各SVR版都没有os-release 文件。我把各桌面版的os-release文件,放到相对应的SVR版中,哈哈,全成了。原先Suse svr 11 也能一路顺风进到 login:。
     还存在一个问题: shutdown 停不下来。不知何故? Suse svr 11  仍启不到图形界面。看来与此无关,是系统对显卡的支持问题。对VHD 封装的LINUX ,安装显卡驱动怎么办?
=============================
另: 我想编译ntfs-3g,LZ的修改包该放到哪个目录? 用什么用户进行make? , 我编译时 老报找不到 makefile 文件。
回复

使用道具 举报

 楼主| 发表于 2015-2-3 18:22:15 | 显示全部楼层
jxdeng 发表于 2015-2-3 16:40
还有:你敲入的mount命令 -t ext4 应该是 -t ext3 吧?因为后面分区信息全是 ext3,没有ext4 .根分区也是ext ...

道理是这样.可是一个不知道判断命令和挂载LVM的命令.是不是mount就可以呢.还有root变量的值需要更改一下.
所以还不好下手.

另外,我怀疑Fedora本身就有从LVM启动的功能的,好象从一个网友的提问看出来的,就是 Fedora默认安装是安装在LVM上的.要是这样,只要找到这个机制就可以了.正在查找中.

关于显卡,感觉与真实机器一样吧 .真实机器怎么安装,vhd就怎么安装.只是有一个问题,如果你使用其他发行版本内核,可能使用不了在vhd内部安装好的显卡驱动,版本不会一样吧.或者你用其他版本内核启动后安装显卡驱动?不太好说,总觉得很乱了.

ntfs-3g文件解压放在那里都行.我一般放在主目录以内.需要安装  gcc g++ build-essential 这几个文件.就可以了.
回复

使用道具 举报

 楼主| 发表于 2015-2-3 18:30:52 | 显示全部楼层
jxdeng 发表于 2015-2-3 16:40
还有:你敲入的mount命令 -t ext4 应该是 -t ext3 吧?因为后面分区信息全是 ext3,没有ext4 .根分区也是ext ...

请教一个问题.比如,现在你在一个真实linux系统中.另一个硬盘或者分区上有一个 LVM.
怎么识别出这个LVM, 并且挂载其中某个逻辑卷到一个指定目录上呢?
能否把命令都写出来看看.我是刚刚学习,对于LVM 没有感觉.
回复

使用道具 举报

发表于 2015-2-3 18:58:11 | 显示全部楼层
      终于把Suse Svr 11 折腾出图形界面了。原来 在VM 中安装时 系统使用了 Driver   ”vboxvideo" 虚拟显卡。在本地启动时,较新的机器不认。如 Intel HD 4400 就不认。 XSERVER 起不来。 对 /etc/X11/xorg.conf 进行配置 改成 Driver  “vesa" 。 重启机器或 startx 即可。 但是虚拟机 又麻烦了。到此 LZ的 ”能挂必能启“ 的结论基本正确。还望解决LV 上的系统。完美了。LZ伟大!

点评

牛!!!恭喜. LVM命令我自己百度得差不多了.可是需要一段时间才能解决.相信能成功.  详情 回复 发表于 2015-2-3 19:01
回复

使用道具 举报

 楼主| 发表于 2015-2-3 19:01:44 | 显示全部楼层
jxdeng 发表于 2015-2-3 18:58
终于把Suse Svr 11 折腾出图形界面了。原来 在VM 中安装时 系统使用了 Driver   ”vboxvideo" 虚拟显 ...

牛!!!恭喜.
LVM命令我自己百度得差不多了.可是需要一段时间才能解决.相信能成功.
回复

使用道具 举报

发表于 2015-2-4 09:15:06 | 显示全部楼层
这个方法适用于任何版本的Ubuntu吗

点评

这个方法还适合任何版本的LINUX ,包括桌面版/SERVER版。思想是活的,方法是死的。但是,还有待改进。  详情 回复 发表于 2015-2-4 18:01
回复

使用道具 举报

 楼主| 发表于 2015-2-4 10:57:56 | 显示全部楼层
是适合于任何版本的.包括1504将来的版本.因为对于systemd已经作了处理.
回复

使用道具 举报

发表于 2015-2-4 18:01:02 | 显示全部楼层
2011xiongdeyuan 发表于 2015-2-4 09:15
这个方法适用于任何版本的Ubuntu吗

这个方法还适合任何版本的LINUX ,包括桌面版/SERVER版。思想是活的,方法是死的。但是,还有待改进。
回复

使用道具 举报

发表于 2015-2-5 16:24:31 | 显示全部楼层
本帖最后由 jxdeng 于 2015-2-5 16:26 编辑

LZ: 问题又来了,我想试试 Suse svr 12 。使用LZ最新的dracut-opensuse 。结果不成功。一怒之下,使用了LZ的 hook 方法。定制了该版本的dracut-suse12。亟希望成功,可惜,还是不成功。核心问题 还是报 /sysroot  没有mount 上来。
手动 mount -t ntfs-3g -o rw /dev/sda2 /host 时,报
ntfs-3g-mount: failed to access mountpoint /host: No such file or directory .
为何没有 host 目录?
不知是你的脚本没有建起目录来,还是我的设备名有变化?
2、 另请问LZ,在使用 dracut -i 时 用普通用户还是超级用户? 两种用户我都使用了。报的是同样的错:
dracut module 'fcoe' will not be installed because command 'dcbtool  fipvlan lldpad ' could not be found!
dracut-install: ERROR: installing 'ntfs-3g'
dracut-install: ERROR: installing 'mount.ntfs-3g'
所以,不知成了么?

点评

一个好消息是 已经解决了引导固定VHD上LVM的linux系统问题.但是框架变化大,正在整理中. 估计等几天就可以整理好做好上传.  详情 回复 发表于 2015-2-5 18:47
1.需要手工建立/host目录.即 在dracut环境下 mkdir -p /host 再挂载才可以. 2. fcoe的错误没什么.我这里也报错.一些依赖没有安装.那个也不需要的. 但 ntfs-3g报错是不行的---因为必须有ntfs-3g才可以以读写方式挂  详情 回复 发表于 2015-2-5 18:44
回复

使用道具 举报

 楼主| 发表于 2015-2-5 18:44:27 | 显示全部楼层
本帖最后由 2011niumao 于 2015-2-5 18:56 编辑
jxdeng 发表于 2015-2-5 16:24
LZ: 问题又来了,我想试试 Suse svr 12 。使用LZ最新的dracut-opensuse 。结果不成功。一怒之下,使用了LZ ...


1.需要手工建立/host目录.即 在dracut环境下 mkdir -p /host  再挂载才可以.
2.制作dracut必须使用root用户的. fcoe的错误没什么.我这里也报错.一些依赖没有安装.那个也不需要的.
但 ntfs-3g报错是不行的---因为必须有ntfs-3g才可以以读写方式挂载ntfs分区.这样才能启动ntfs分区
上的vhd .所以这个ntfs-3g必须加入到 dracut.
看错误信息是没有成功编译安装 ntfs-3g.需要重新编译安装ntfs-3g.
回复

使用道具 举报

 楼主| 发表于 2015-2-5 18:47:53 | 显示全部楼层
本帖最后由 2011niumao 于 2015-2-5 19:00 编辑
jxdeng 发表于 2015-2-5 16:24
LZ: 问题又来了,我想试试 Suse svr 12 。使用LZ最新的dracut-opensuse 。结果不成功。一怒之下,使用了LZ ...


一个好消息是 已经解决了引导固定VHD上LVM的linux系统问题.但是框架变化大,正在整理中.
决定抛弃vloop  vlooppart.改为使用kloop kroot klvm三个参数.
新的引导方式命名为kloop方式===意思是基于kpartx + loop 的引导方式.旧的引导方式可以称为vloop引导方式.
估计等几天就可以整理好做好上传.
回复

使用道具 举报

 楼主| 发表于 2015-2-8 11:40:37 | 显示全部楼层

KLOOP引导

本帖最后由 2011niumao 于 2015-2-8 14:30 编辑

发布使用KLOOP制作的两个内存初始化镜像盘.请到一楼链接的KLOOP子目录中下载详细的使用说明和引导文件.
使用说明内容摘要
   KLOOP的模式起源于无忧启动论坛网友 jxdeng 提出的一个想法: 使用vloop方式引导VHD上的LVM.这样需要对于vloop模式进行改造.
   重新整合的vloop模式改名字,命名为KLOOP.指的是基于kpartx命令和LOOP设备的引导方式.
   它可以引导无分区的img系统,固定vhd系统,固定vhd并且使用LVM系统,  以及硬盘分区上LVM系统(未测试).
   KLOOP的主要参数有四个: root kloop kroot klvm.
2. root参数还是指vhd文件所在硬盘分区.其值是 root=/dev/sdax 或者 root=UUID=XXXXXXXXXXXXX.
   kloop参数与vloop一样,只是改个名字而已. 他的值是 vhd文件带路经的名称.
   例如 kloop=/ubuntu/Fedoralvm.vhd
3. kroot的值是LINUX启动以后根分区的设备名称.
   例如 kroot=/dev/mapper/loop0p1
   与旧参数vlooppart的对应关系如下
   如果旧参数 vlooppart=p3,则 kroot=/dev/mapper/loop0p3
   如果旧参数 vlooppart=p1,则 kroot=/dev/mapper/loop0p1
   即 /dev/mapper/loop0再加上旧参数vlooppart的值,就是新参数 kroot的值.
   可以看出,使用 kroot 的好处是---根设备完全由用户指定,这样就有很大的自由来控制启动过程.
4. 如果使用了固定VHD上的LVM ,则可以设定 klvm 的值为卷组(volume group)的名称,应该是物理卷组的名称.
   例如 使用VirtualBox把Fedora21按照默认方式安装在一个固定大小的vhd中.此时
   参数 klvm=fedora   而参数 kroot=/dev/mapper/fedora-root

回复

使用道具 举报

 楼主| 发表于 2015-2-8 11:44:56 | 显示全部楼层

KLOOP引导菜单例子

本帖最后由 2011niumao 于 2015-2-10 11:19 编辑

对于固定VHD上使用LVM的系统,使用KLOOP制作的内存初始化镜像盘引导时的菜单例子:  
grub2菜单.
  1. menuentry " Fedoralvm.vhd-kloop " --class  fedora {
  2.         insmod gzio
  3.         insmod part_msdos
  4.         insmod part_gpt
  5.         insmod ext2
  6.         insmod ntfs
  7.         insmod probe
  8.         set root=(hd0,1)
  9.         search --no-floppy -f --set=aabbcc  /ubuntu/Fedoralvm.vhd
  10.         set root=${aabbcc}
  11.         probe -u --set=ddeeff ${aabbcc}
  12.         linux        /ubuntu/vmlinuz-fedora root=UUID=${ddeeff} kloop=/ubuntu/Fedoralvm.vhd kroot=/dev/mapper/fedora-root klvm=fedora
  13.         initrd        /ubuntu/dracut-fedora-kloop
  14. }
复制代码
grub4dos菜单
  1. title 启动 Fedoralvm.vhd-kloop
  2. find --set-root --ignore-floppies --ignore-cd /ubuntu/Fedoralvm.vhd
  3. uuid ()
  4. kernel  /ubuntu/vmlinuz-fedora  root=UUID=%?%  kloop=/ubuntu/Fedoralvm.vhd   kroot=/dev/mapper/fedora-root   klvm=fedora
  5. initrd  /ubuntu/dracut-fedora-kloop
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-2-8 12:01:46 | 显示全部楼层
本帖最后由 2011niumao 于 2015-2-8 12:07 编辑

一点说明:为了维持代码的简单性,制作KLOOP的内存初始化镜像盘时候把vloop代码舍弃了.(UBUNTU中还删除了loop代码).
这样,不能使用vloop参数引导KLOOP的内存盘.也不能使用KLOOP引导菜单引导过去的vloop方式的内存盘.
就是
以KLOOP方式制作的内存初始化镜像盘只能使用 kloop kroot klvm参数引导.
过去的制作方法,统称为vloop方式,制作的内存初始化镜像盘只能使用 vloop vlooppart参数引导.


回复

使用道具 举报

 楼主| 发表于 2015-2-8 18:26:10 | 显示全部楼层
本帖最后由 2011niumao 于 2015-2-8 19:02 编辑
jxdeng 发表于 2015-2-2 13:11
我的分区是:
part /boot --fstype ext3 --size=100
part pv.2 --size=0 --grow
volgroup vg_sys --pesize=32768 pv.2
logvol swap --fstype swap --name=lv_swap --vgname=vg_sys --size=1000
logvol / --fstype ext3 --name=lv_root --vgname=vg_sys --size=1000
logvol /tmp --fstype ext3 --name=lv_tmp --vgname=vg_sys --size=400
logvol /var --fstype ext3 --name=lv_var --vgname=vg_sys --size=2000
logvol /usr --fstype ext3 --name=lv_usr --vgname=vg_sys --size=800
logvol /oracle --fstype ext3 --name=lv_oracle --vgname=vg_sys --size=2400
logvol /home/appc --fstype ext3 --name=lv_topsic --vgname=vg_sys --size=2000
如果使用KLOOP测试,建议 grub2 参数如下.
但是LVM这一块不太熟悉.所用命令比较简陋,未必能应付太一般的情况.默认情况也许能行===指lv设备是/dev/mapper/vgname-lvname 这样的情况.
  1. kloop=vhd文件带路径名称  kroot=/dev/mapper/vg_sys-lv_root  klvm=vg_sys
复制代码
注释 如果是真实硬盘分区上的LVM,则设置 kloop=1 ,也可以启动到真实硬盘上LVM安装的LINUX.(在虚拟机上测试成功)
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2021-3-9 12:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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