无忧启动论坛

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

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

    [复制链接]
 楼主| 发表于 2015-2-15 17:52:31 | 显示全部楼层
jxdeng 发表于 2015-2-15 17:21
恭喜LZ,在VHD封装LINUX上一统江湖,统一了FS 和LV 上的VHD linux 的引导。早期试过你的VBUNTU,定 ...

谢谢梳理.引导这一块是变化比较大的.比较容易搞乱,
整理的教程其实代码仅仅是做了一些优化,增加其通用性,但没有实质性的扩展.
不过发现一些LINUX发布版没有kpartx命令,只使用partx命令---如ARCH---竟然也可以,
算是个意外收获吧.

dracut只使用10-那一个文件就可以.同样,只使用05就得到了过去的我称为VLOOP的dracut,它不能引导lvm,但可以引导固定VHD和 不分区img(不设置 vlooppart ).

10,05是随便起的.文献说dracut是依照降序使用hook的,越大的越先执行.所以脚本一般要以两位数开始命名.
可以随便更改,如 50 80 等等.
回复

使用道具 举报

 楼主| 发表于 2015-2-15 17:57:02 | 显示全部楼层
本帖最后由 2011niumao 于 2015-2-15 18:02 编辑
jxdeng 发表于 2015-2-15 17:29
请问LZ,同时支持FS和LVM的内核,在dracut 定制内核时,需要把05-vhdmount.sh  10-vhdmount-kloop.sh 两个 ...


制作dracut时候只使用一个文件就可以了.=====都使用也可以的,把放入一个文件更改为放入一个目录就行;就可以同时放入多个文件到dracut中.

制作dracut时候,选择只使用10,称为KLOOP模式.引导参数是 root kloop kroot klvm 四个.
可以引导 固定vhd上LVM,固定VHD普通分区,无分区img.

制作dracut时候,选择只使用05 称为VLOOP模式,引导参数是 root vloop vlooppart 三个.
可以引导 固定vhd普通分区.无分区img(引导无分区img时候不设vlooppart).不能引导VHD上的LVM.
回复

使用道具 举报

 楼主| 发表于 2015-2-15 20:43:05 | 显示全部楼层
jxdeng 发表于 2015-2-15 17:29
请问LZ,同时支持FS和LVM的内核,在dracut 定制内核时,需要把05-vhdmount.sh  10-vhdmount-kloop.sh 两个 ...

随便在网上浏览.看到这么一段.来自SUSE Linux Enterprise Server 11 SP3 储存管理指南
4.6. 自动激活非 root LVM 卷组¶

非 root LVM 卷组的激活行为受 /etc/sysconfig/lvm 文件中参数设置的控制。

默认情况下,/etc/rc.d/boot.lvm 在系统重启时会根据 /etc/sysconfig/lvm 文件中的 LVM_VGS_ACTIVATED_ON_BOOT 参数设置自动激活非 root LVM 卷组。您可以使用此参数在系统重启时激活所有卷组,或仅激活指定的非 root LVM 卷组。

要在系统重启时激活所有非 root LVM 卷组,请确保 /etc/sysconfig/lvm 文件中的 LVM_VGS_ACTIVATED_ON_BOOT 参数值为空 ("")。这是默认设置。对于几乎所有标准的 LVM 安装,都可以安全地将该参数值保留为空。

LVM_VGS_ACTIVATED_ON_BOOT=""

要在系统重启时仅激活指定的非 root LVM 卷组,则请将卷组名称指定为 LVM_VGS_ACTIVATED_ON_BOOT 参数的值:

LVM_VGS_ACTIVATED_ON_BOOT="vg1"

默认情况下,不会自动激活新发现的 LVM 卷组。/etc/sysconfig/lvm 文件中禁用 LVM_ACTIVATED_ON_DISCOVERED 参数:

LVM_ACTIVATED_ON_DISCOVERED="disable"

您可以启用 LVM_ACTIVATED_ON_DISCOVERED 参数,以便通过 udev 规则激活新发现的 LVM 卷组:

LVM_ACTIVATED_ON_DISCOVERED="enable"
回复

使用道具 举报

发表于 2015-3-10 14:14:08 | 显示全部楼层
感谢楼主提供的方法,我自己测试了一下,发现直接修改initrd.img文件也能实现vhd启动,首先安装kpartx和kpatx-boot,使用zcat /boot/initrd.img | cpio -id解包initrd.img。修改initrd.img中的/scripts/local,加入您上面提供的代码,然后将/sbin下的losetup,shutdown,kpartx复制到initrd.img的/sbin目录,使用find . |  cpio -H newc --create  | gzip -9 > ../initrd.img重新打包生成initrd.img即可启动vhd。。。



楼主有时间可以研究下将linux灌入到img中吗?就像wubi安装ubuntu那样,我估计都不需要多安装什么软件了

点评

直接修改initrd.img也不错。不过对于命令文件,如果有依赖关系。需要手工把依赖的库,相关软连接找到并拷贝到 initrd.img中,比较辛苦和容易遗漏的。还是利用系统的mkinitramfs命令靠谱。 对于img文件,猜测可以  详情 回复 发表于 2015-3-10 16:20
回复

使用道具 举报

 楼主| 发表于 2015-3-10 16:20:21 | 显示全部楼层
ql1307096 发表于 2015-3-10 14:14
感谢楼主提供的方法,我自己测试了一下,发现直接修改initrd.img文件也能实现vhd启动,首先安装kpartx和kpa ...

直接修改initrd.img也不错。不过对于命令文件,如果有依赖关系。需要手工把依赖的库,相关软连接找到并拷贝到 initrd.img中,比较辛苦和容易遗漏的。还是利用系统的mkinitramfs命令靠谱。

对于img文件,猜测可以先在LIVE系统中现制作一个ing 并且挂载img为loop设备,然后把LINUX安装上去,
或者把squashfs文件也挂载,直接拷贝squashfs内文件到img内,再修改一下fstab,应该就算灌好了。

我只使用过第二种,就是直接把一个安装好的系统备份,恢复到img上。然后使用这里的方法制作initrd。
结果是 固定大小的img ,可以引导。如果img是动态大小,不能引导。和vhd一样。

点评

你应该是用kpartx引导的,wubi安装的ubuntu的initrd。img应该不是用kpartx,它生成的img镜像不是固定大小的,不过据说这种方法不适合efi  详情 回复 发表于 2015-3-10 18:25
回复

使用道具 举报

发表于 2015-3-10 18:25:29 | 显示全部楼层
2011niumao 发表于 2015-3-10 16:20
直接修改initrd.img也不错。不过对于命令文件,如果有依赖关系。需要手工把依赖的库,相关软连接找到并拷 ...

你应该是用kpartx引导的,wubi安装的ubuntu的initrd。img应该不是用kpartx,它生成的img镜像不是固定大小的,不过据说这种方法不适合efi
回复

使用道具 举报

 楼主| 发表于 2015-3-10 21:30:46 来自手机 | 显示全部楼层
哦。没想到wubi可以引导动态大小的img.
回复

使用道具 举报

发表于 2015-4-29 23:11:06 | 显示全部楼层
使用制作好的内核启动,内核头文件怎么办??

点评

自己手动安装或者使用新立得搜索安装即可. 最好自己制作可以引导vhd的内核镜像盘.已经发布有教程的拉.  详情 回复 发表于 2015-4-30 22:09
回复

使用道具 举报

 楼主| 发表于 2015-4-30 22:09:34 | 显示全部楼层
kinamu 发表于 2015-4-29 23:11
使用制作好的内核启动,内核头文件怎么办??

自己手动安装或者使用新立得搜索安装即可.
最好自己制作可以引导vhd的内核镜像盘.已经发布有教程的拉.
回复

使用道具 举报

发表于 2015-5-1 01:12:40 | 显示全部楼层
收藏了,感谢楼主
回复

使用道具 举报

 楼主| 发表于 2015-5-10 17:09:12 | 显示全部楼层
本帖最后由 2011niumao 于 2015-5-11 12:45 编辑

第一楼第二个链接 http://pan.baidu.com/s/1bnnjBXX#path=%252FKLOOP
新发布一个小型ubuntu系统.  vhd约7g unity桌面环境.
用户名密码都是ubuntu   
请同时下载五个文件
ubt-small1504.vhd.7z  vmlinuz-3.19.0-15-generic initrd.img-3.19.0-15-generic
   (小)grub通用启动器-20150510.7z(两个任下载一个)  ubt-small1504.vhd与grub通用启动器使用说明.txt
按照说明作解压复制 引导设置 就可以了.
这是把网友 ghostplant的简化作品 依照kloop方法制作成的固定vhd系统.欢迎测试使用.
原版是iso格式,链接
http://pan.baidu.com/s/1bnzUNfx# ... Classic-14.04.1-LTS
vivid-unity-amd64-20150425.iso

点评

第一楼第二个链接 http://pan.baidu.com/s/1bnnjBXX#path=%252FKLOOP 发布两个制作好的可以引导固定vhd的内存初始化镜像盘: ubuntu 1504 版本 3.19.0-15-generic fedora21 版本 .19.5-200.fc21.x86_64 欢迎测试  详情 回复 发表于 2015-5-10 17:11
回复

使用道具 举报

 楼主| 发表于 2015-5-10 17:11:42 | 显示全部楼层
2011niumao 发表于 2015-5-10 17:09
第一楼第二个链接 http://pan.baidu.com/s/1bnnjBXX#path=%252FKLOOP
新发布一个小型ubuntu系统.  vhd约7g ...

第一楼第二个链接 http://pan.baidu.com/s/1bnnjBXX#path=%252FKLOOP
发布两个制作好的可以引导固定vhd的内存初始化镜像盘:
ubuntu 1504 版本 3.19.0-15-generic
fedora21 版本 .19.5-200.fc21.x86_64
欢迎测试使用.
回复

使用道具 举报

发表于 2015-6-6 04:40:25 | 显示全部楼层
灰常感谢撸主的精彩分享,硬盘启动系统以后用来去相当给力;
但是兼容性还是会挂掉;
1.我硬盘是SSD组的RAID 0,启动大概是ROOT DEVICE丢失之类的;
2.放到移动硬盘以后也启动不起来,报错跟上面差不多;
该怎么解决,谢谢
放在本地SATA盘毫无问题,这一点灰常给力!

点评

RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上. 这里提供的nitrd.img只适用于普通固定vhd分区以及LVM情况.  详情 回复 发表于 2015-6-6 09:23
RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上. 这里提供的nitrd.img只适用于普通固定vhd分区以及LVM情况.  详情 回复 发表于 2015-6-6 09:23
RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上. 这里提供的nitrd.img只适用于普通固定vhd分区以及LVM情况.  详情 回复 发表于 2015-6-6 09:22
回复

使用道具 举报

 楼主| 发表于 2015-6-6 09:22:58 | 显示全部楼层
crown2kiss 发表于 2015-6-6 04:40
灰常感谢撸主的精彩分享,硬盘启动系统以后用来去相当给力;
但是兼容性还是会挂掉;
1.我硬盘是SSD组的RAID ...

RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上.
这里提供的nitrd.img只适用于普通固定vhd分区以及LVM情况.
回复

使用道具 举报

 楼主| 发表于 2015-6-6 09:23:01 | 显示全部楼层
crown2kiss 发表于 2015-6-6 04:40
灰常感谢撸主的精彩分享,硬盘启动系统以后用来去相当给力;
但是兼容性还是会挂掉;
1.我硬盘是SSD组的RAID ...

RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上.
这里提供的nitrd.img只适用于普通固定vhd分区以及LVM情况.
回复

使用道具 举报

 楼主| 发表于 2015-6-6 09:23:03 | 显示全部楼层
crown2kiss 发表于 2015-6-6 04:40
灰常感谢撸主的精彩分享,硬盘启动系统以后用来去相当给力;
但是兼容性还是会挂掉;
1.我硬盘是SSD组的RAID ...

RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上.
这里提供的nitrd.img只适用于普通固定vhd分区以及LVM情况.

点评

哦,好的,有空再研究一下,有了这个装好的系统,瞬间省事多了,从撸主这里学到了关于GRUB2好多东西,真心感谢了  详情 回复 发表于 2015-6-6 09:44
回复

使用道具 举报

发表于 2015-6-6 09:44:30 | 显示全部楼层
2011niumao 发表于 2015-6-6 09:23
RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上. ...

哦,好的,有空再研究一下,有了这个装好的系统,瞬间省事多了,从撸主这里学到了关于GRUB2好多东西,真心感谢了
回复

使用道具 举报

发表于 2015-6-18 12:15:29 | 显示全部楼层
本帖最后由 囧弟 于 2015-6-18 12:17 编辑

楼主你好,我按照你写的kloop教程做了个ubuntu15.04的VHD,但是启动不了。折腾了好几天,没办法。
这是启动时失败的图,就一直卡在这里。
捕获.JPG
安装时单分区,VHD大小8G。我下载了你的VHD发现可以启动,所以我觉得是系统的问题,但已经按照教程每一步制作。
刚接触VHD不久,望能分析分析,新人在此谢过!
附上grub4dos的代码
title ubuntu
find --set-root --ignore-floppies --ignore-cd  /ubuntu/ubuntu.vhd
uuid ()
kernel /ubuntu/vmlinuz-3.19.0-15-generic root=UUID=%?%  kloop=/ubuntu/ubuntu.vhd  kroot=/dev/mapper/loop0p1
initrd  /ubuntu/initrd.img-3.19.0-15-generic

点评

从出错信息看是 vhd所在分区 没有挂载好.可以使用其他方法. 例如,如果vhd文件所在分区的LABEL只有英文,可以把root=那一句更改为 root=LABEL=xxxxx 或者 使用 root=/dev/sdax x指分区序号.第一个主分区是sda1  详情 回复 发表于 2015-6-18 16:26
回复

使用道具 举报

 楼主| 发表于 2015-6-18 16:26:18 | 显示全部楼层
囧弟 发表于 2015-6-18 12:15
楼主你好,我按照你写的kloop教程做了个ubuntu15.04的VHD,但是启动不了。折腾了好几天,没办法。
这是启 ...

从出错信息看是 vhd所在分区 没有挂载好.可以使用其他方法.
例如,如果vhd文件所在分区的LABEL只有英文,可以把root=那一句更改为  root=LABEL=xxxxx
或者 使用 root=/dev/sdax  x指分区序号.第一个主分区是sda1   第一个逻辑分区是 sda5 .  

点评

十分感谢,有点忙回复晚了。 回归正题,尝试了你的两种方法,结果依旧。也再去百度了许多方法,依旧不得解。 然后尝试了将initrd.img-3.19.0-15-generic(自己提取的,20M)更换了你提供的initrd.img-3.19.0-15-ge  详情 回复 发表于 2015-6-19 18:47
回复

使用道具 举报

发表于 2015-6-19 18:47:14 | 显示全部楼层
2011niumao 发表于 2015-6-18 16:26
从出错信息看是 vhd所在分区 没有挂载好.可以使用其他方法.
例如,如果vhd文件所在分区的LABEL只有英文, ...

十分感谢,有点忙回复晚了。
回归正题,尝试了你的两种方法,结果依旧。也再去百度了许多方法,依旧不得解。
然后尝试了将initrd.img-3.19.0-15-generic(自己提取的,20M)更换了你提供的initrd.img-3.19.0-15-generic(约30M),结果就成功启动了!再次感谢!
于是乎有了个疑问,为何自己提取的initrd.img文件无法使自己的系统启动,反而可以使你的系统启动?

点评

怀疑这一步没有作[quote]四.编译安装ntfs-3g 4-1 编译安装ntfs-3g 附件ntfs-3g_ntfsprogs-2015.3.14.fixed 是已经修改好的ntfs-3g源码. 对他手工编译安装.解压到你的主目录以后,打开一个终端.进入该目录.依次执行  详情 回复 发表于 2015-6-20 09:35
回复

使用道具 举报

 楼主| 发表于 2015-6-20 09:35:31 | 显示全部楼层
囧弟 发表于 2015-6-19 18:47
十分感谢,有点忙回复晚了。
回归正题,尝试了你的两种方法,结果依旧。也再去百度了许多方法,依旧不得 ...


怀疑这一步没有作
四.编译安装ntfs-3g
4-1 编译安装ntfs-3g
附件ntfs-3g_ntfsprogs-2015.3.14.fixed 是已经修改好的ntfs-3g源码.
对他手工编译安装.解压到你的主目录以后,打开一个终端.进入该目录.依次执行以下命令:

./configure
make
sudo make install
就可以了.
注释 需要事先安装好 gcc g++ build-essential 等软件.一个命令的事情.
sudo apt-get install  gcc g++ build-essential

4-2 编辑ntfs-3g
编辑文件:/usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g
将附件本目录所带的ntfs_3g的内容拷贝覆盖原始内容,保存即可。
sudo cp /usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g ~/ntfs_3g.backup
sudo cp -f  ntfs_3g /usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g

点评

再重新试试,感谢!  详情 回复 发表于 2015-6-21 10:52
回复

使用道具 举报

发表于 2015-6-20 12:02:23 | 显示全部楼层
大神 ,可以试试这个VHD启动的 估计支持动态VHD,VDI,VMDK http://vdfuse.sourceforge.net/

点评

看过.与这里的基于 kpartx命令的模式各有所长吧.看其说明似乎只局限于Debian类.  详情 回复 发表于 2015-6-20 20:20
回复

使用道具 举报

 楼主| 发表于 2015-6-20 20:20:41 | 显示全部楼层
2011aaa 发表于 2015-6-20 12:02
大神 ,可以试试这个VHD启动的 估计支持动态VHD,VDI,VMDK http://vdfuse.sourceforge.net/

看过.与这里的基于 kpartx命令的模式各有所长吧.
vdfuse beta
An addon to ubuntu/debian kernel that enables booting a VHD.
看其说明似乎只局限于Debian类.
回复

使用道具 举报

发表于 2015-6-21 10:52:48 | 显示全部楼层
2011niumao 发表于 2015-6-20 09:35
怀疑这一步没有作

再重新试试,感谢!
回复

使用道具 举报

发表于 2015-7-2 13:31:40 | 显示全部楼层
楼主有空研究下centos....z装到vhd

点评

所有使用dracut的linux发行版原理上都可以这样处理.注意 手工编译ntfs-3g这一步看来是必须的.原来我一直以为他的作用只是防止关机时候出现的I/O buffer 错误.现在看在引导阶段为了能够以可写方式挂载ntfs分区上的vhd  详情 回复 发表于 2015-7-10 11:00
固定vhd上安装了一个centos.成功引导.为了简化,使用标准分区ext4.. 参考Fedora的方法.可以简化为两步 在一楼KLOOP连接里面下载 mydracut.zip 解压到主目录内, 第一步,手工编译安装ntfs-3g. 三个命令. 打开一个sh  详情 回复 发表于 2015-7-10 10:52
回复

使用道具 举报

 楼主| 发表于 2015-7-10 10:52:41 | 显示全部楼层

需要手工编译安装ntfs-3g

本帖最后由 2011niumao 于 2015-7-10 11:01 编辑
carbonjiao 发表于 2015-7-2 13:31
楼主有空研究下centos....z装到vhd


固定vhd上安装了一个centos.成功引导.为了简化,使用标准分区ext4..
参考Fedora的方法.可以简化为两步
注意 需要安装gcc 检查kpartx命令是否安装.(我这里kpartx默认安装了)
在一楼KLOOP连接里面下载 mydracut.zip 解压到主目录内,
第一步,手工编译安装ntfs-3g. 三个命令.
打开一个shell  su  密码进入root模式.
进入ntfs-3gXXXXXXXXXX的目录,依次执行
  1. ./configure
  2. make
  3. make install
复制代码

第二步,制作可以引导固定vhd的initramfs.一个命令搞定.
  1. dracut  -i /home/niumao/mydracut/10-vhdmount-kloop.sh /lib/dracut/hooks/pre-mount/10-vhdmount-kloop.sh  --no-hostonly  --install " vi /etc/virc ps grep cat rm blkid losetup  kpartx partx mount.fuse mount.ntfs-3g ntfs-3g shutdown  lvm  vgchange  vgmknodes  vgscan  dmsetup dmeventd  "   --add-drivers  "fuse dm-mod "  -o " plymouth btrfs crypt  cifs fcoe fcoe-uefi iscsi nfs nbd"  /home/niumao/dracut-centos-kloop
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-7-10 11:00:56 | 显示全部楼层
carbonjiao 发表于 2015-7-2 13:31
楼主有空研究下centos....z装到vhd

所有使用dracut的linux发行版原理上都可以这样处理.注意 手工编译ntfs-3g这一步看来是必须的.原来我一直以为他的作用只是防止关机时候出现的I/O buffer 错误.现在看在引导阶段为了能够以可写方式挂载ntfs分区上的vhd,也需要手工编译安装ntfs-3g.(原因可能是内核所带ntfs驱动只能只读挂载ntfs分区.)

点评

我把出问题[fail to start journal service]的vhd中 ntfs-3g 删掉,apt-get安装未fix过的ntfs-3g ,虽然引入了i/o buffer的问题,但是journal的问题解决了,重新生成的initrd依然能挂载可读写ntfs分区,不解  详情 回复 发表于 2015-9-8 15:43
感谢 一下忘记 Centos 和 Federa 都是 红帽子系了。。。  详情 回复 发表于 2015-7-15 15:59
回复

使用道具 举报

发表于 2015-7-15 15:59:45 | 显示全部楼层
2011niumao 发表于 2015-7-10 11:00
所有使用dracut的linux发行版原理上都可以这样处理.注意 手工编译ntfs-3g这一步看来是必须的.原来我一直 ...

感谢   

一下忘记 Centos 和 Federa 都是 红帽子系了。。。
回复

使用道具 举报

发表于 2015-7-18 11:26:18 | 显示全部楼层
来学习啦!!!
回复

使用道具 举报

发表于 2015-9-6 11:36:36 | 显示全部楼层
请教一下,现在日常从硬盘中的vhd直接启动是正常的,但用virtualbox启动vhd中的Ubuntu,使用修改过的内核3.19.0-26会提示Error - systemd[1]: Failed to start Journal Service,但使用没有经过 mkinitramfs的3.19.0-15内核启动在virtualbox启动就是没有报错的,请问是vhd引导造成的么?

点评

应该不是vhd引导的原因,猜测是systemd的问题.可以更新到最新后重新制作一下,也许可以变好.  详情 回复 发表于 2015-9-6 18:56
应该不是vhd引导的原因,猜测是systemd的问题.可以更新到最新后重新制作一下,也许可以变好.  详情 回复 发表于 2015-9-6 18:56
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-28 19:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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