恭喜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 等等. 本帖最后由 2011niumao 于 2015-2-15 18:02 编辑
jxdeng 发表于 2015-2-15 17:29
请问LZ,同时支持FS和LVM的内核,在dracut 定制内核时,需要把05-vhdmount.sh10-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. jxdeng 发表于 2015-2-15 17:29
请问LZ,同时支持FS和LVM的内核,在dracut 定制内核时,需要把05-vhdmount.sh10-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"
感谢楼主提供的方法,我自己测试了一下,发现直接修改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那样,我估计都不需要多安装什么软件了 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一样。 2011niumao 发表于 2015-3-10 16:20
直接修改initrd.img也不错。不过对于命令文件,如果有依赖关系。需要手工把依赖的库,相关软连接找到并拷 ...
你应该是用kpartx引导的,wubi安装的ubuntu的initrd。img应该不是用kpartx,它生成的img镜像不是固定大小的,不过据说这种方法不适合efi 哦。没想到wubi可以引导动态大小的img. 使用制作好的内核启动,内核头文件怎么办?? kinamu 发表于 2015-4-29 23:11
使用制作好的内核启动,内核头文件怎么办??
自己手动安装或者使用新立得搜索安装即可.
最好自己制作可以引导vhd的内核镜像盘.已经发布有教程的拉. 收藏了,感谢楼主 本帖最后由 2011niumao 于 2015-5-11 12:45 编辑
第一楼第二个链接 http://pan.baidu.com/s/1bnnjBXX#path=%252FKLOOP
新发布一个小型ubuntu系统.vhd约7g unity桌面环境.
用户名密码都是ubuntu
请同时下载五个文件
ubt-small1504.vhd.7zvmlinuz-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#path=%252FUbuntu-Classic-14.04.1-LTS
vivid-unity-amd64-20150425.iso 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
欢迎测试使用. 灰常感谢撸主的精彩分享,硬盘启动系统以后用来去相当给力;
但是兼容性还是会挂掉;
1.我硬盘是SSD组的RAID 0,启动大概是ROOT DEVICE丢失之类的;
2.放到移动硬盘以后也启动不起来,报错跟上面差不多;
该怎么解决,谢谢
放在本地SATA盘毫无问题,这一点灰常给力! crown2kiss 发表于 2015-6-6 04:40
灰常感谢撸主的精彩分享,硬盘启动系统以后用来去相当给力;
但是兼容性还是会挂掉;
1.我硬盘是SSD组的RAID ...
RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上.
这里提供的nitrd.img只适用于普通固定vhd分区以及LVM情况. crown2kiss 发表于 2015-6-6 04:40
灰常感谢撸主的精彩分享,硬盘启动系统以后用来去相当给力;
但是兼容性还是会挂掉;
1.我硬盘是SSD组的RAID ...
RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上.
这里提供的nitrd.img只适用于普通固定vhd分区以及LVM情况. crown2kiss 发表于 2015-6-6 04:40
灰常感谢撸主的精彩分享,硬盘启动系统以后用来去相当给力;
但是兼容性还是会挂掉;
1.我硬盘是SSD组的RAID ...
RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上.
这里提供的nitrd.img只适用于普通固定vhd分区以及LVM情况. 2011niumao 发表于 2015-6-6 09:23
RAID 0的安装方法需要重新改写initrd.img里面的init文件.把根设备在RAID上的情况下挂载根设备的代码加上. ...
哦,好的,有空再研究一下,有了这个装好的系统,瞬间省事多了,从撸主这里学到了关于GRUB2好多东西,真心感谢了 本帖最后由 囧弟 于 2015-6-18 12:17 编辑
楼主你好,我按照你写的kloop教程做了个ubuntu15.04的VHD,但是启动不了。折腾了好几天,没办法。
这是启动时失败的图,就一直卡在这里。
安装时单分区,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.vhdkroot=/dev/mapper/loop0p1
initrd/ubuntu/initrd.img-3.19.0-15-generic 囧弟 发表于 2015-6-18 12:15
楼主你好,我按照你写的kloop教程做了个ubuntu15.04的VHD,但是启动不了。折腾了好几天,没办法。
这是启 ...
从出错信息看是 vhd所在分区 没有挂载好.可以使用其他方法.
例如,如果vhd文件所在分区的LABEL只有英文,可以把root=那一句更改为root=LABEL=xxxxx
或者 使用 root=/dev/sdaxx指分区序号.第一个主分区是sda1 第一个逻辑分区是 sda5 . 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文件无法使自己的系统启动,反而可以使你的系统启动?
囧弟 发表于 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 installgcc 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 -fntfs_3g /usr/share/initramfs-tools/scripts/local-bottom/ntfs_3g
大神 ,可以试试这个VHD启动的 估计支持动态VHD,VDI,VMDK http://vdfuse.sourceforge.net/ 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类. 2011niumao 发表于 2015-6-20 09:35
怀疑这一步没有作
再重新试试,感谢! 楼主有空研究下centos....z装到vhd
需要手工编译安装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. 三个命令.
打开一个shellsu密码进入root模式.
进入ntfs-3gXXXXXXXXXX的目录,依次执行
./configure
make
make install
第二步,制作可以引导固定vhd的initramfs.一个命令搞定.
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 losetupkpartx partx mount.fuse mount.ntfs-3g ntfs-3g shutdownlvmvgchangevgmknodesvgscandmsetup dmeventd" --add-drivers"fuse dm-mod "-o " plymouth btrfs cryptcifs fcoe fcoe-uefi iscsi nfs nbd"/home/niumao/dracut-centos-kloop carbonjiao 发表于 2015-7-2 13:31
楼主有空研究下centos....z装到vhd
所有使用dracut的linux发行版原理上都可以这样处理.注意 手工编译ntfs-3g这一步看来是必须的.原来我一直以为他的作用只是防止关机时候出现的I/O buffer 错误.现在看在引导阶段为了能够以可写方式挂载ntfs分区上的vhd,也需要手工编译安装ntfs-3g.(原因可能是内核所带ntfs驱动只能只读挂载ntfs分区.) 2011niumao 发表于 2015-7-10 11:00
所有使用dracut的linux发行版原理上都可以这样处理.注意 手工编译ntfs-3g这一步看来是必须的.原来我一直 ...
感谢
一下忘记 Centos 和 Federa 都是 红帽子系了。。。 来学习啦!!! 请教一下,现在日常从硬盘中的vhd直接启动是正常的,但用virtualbox启动vhd中的Ubuntu,使用修改过的内核3.19.0-26会提示Error - systemd: Failed to start Journal Service,但使用没有经过 mkinitramfs的3.19.0-15内核启动在virtualbox启动就是没有报错的,请问是vhd引导造成的么?