无忧启动论坛

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

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

    [复制链接]
 楼主| 发表于 2020-6-12 19:51:22 | 显示全部楼层
本帖最后由 2011niumao 于 2020-6-12 19:52 编辑
2011niumao 发表于 2020-6-12 19:45
还有一种情形,需要注意
就是先进入squashfs系统,在这个系统下修改vhd系统中的/etc/fstab文件,把它的根分 ...

最后这种可能性最大. 我也遇到了几次图片中显示的引导失败情形,
改了/etc/fstab 就成功引导了.
猜想其机制是:
由于/etc/fstab里的根分区挂载信息被注释掉
(不注释时候启动squashfs文件系统会出错)
所以系统检测完根分区后应该是不能重新再挂载根分区了. 所以就出错了

在/etc/fstab中最好还是使用uuid,这样可以保证根分区的正确性.这里
uuid指的是vhd硬盘里面linux系统所在分区的uuid .

回复

使用道具 举报

发表于 2020-6-12 20:14:51 | 显示全部楼层
本帖最后由 2011hjcjie 于 2020-6-12 21:24 编辑
2011niumao 发表于 2020-6-12 19:18
首先,grub2没有问题,唯一的问题可能是linux命令中的root ,kroot, kloop参数是否正确了

kroot参数是不 ...

kroot 参数应该没问题吧,参考附图---是p1
root参数应该也没问题,同样的位置squashfs能够正常启动


2020-06-12 20-11-18屏幕截图.png
回复

使用道具 举报

发表于 2020-6-12 20:39:56 | 显示全部楼层
本帖最后由 2011hjcjie 于 2020-6-12 21:03 编辑

2011niumao 发表于 2020-6-12 19:45
还有一种情形,需要注意
就是先进入squashfs系统,在这个系统下修改vhd系统中的/etc/fstab文件,把它的根分区 ...

loop8px 这个参数是什么意思?提示装入点不存在...  ###解决了,落掉了一个/

2020-06-12 20-39-33屏幕截图.png

回复

使用道具 举报

 楼主| 发表于 2020-6-12 20:53:09 | 显示全部楼层
本帖最后由 2011niumao 于 2020-6-12 20:55 编辑

那就说明 root kloop kroot 没有问题
那个 8(随便写的)---看你的kpartx -av的输出而定--你这里是 11 --- 就使用 11
  1. sudo mount /dev/mapper/loop11p1 /mnt
复制代码

mnt 更改为 /mnt

点评

uuid那一行每注释掉,不过貌似id不正确 我改改试一下...  详情 回复 发表于 2020-6-12 21:09
回复

使用道具 举报

发表于 2020-6-12 21:09:22 | 显示全部楼层
本帖最后由 2011hjcjie 于 2020-6-13 09:21 编辑
2020-06-12 21-08-17屏幕截图.png 2020-06-12 21-04-52屏幕截图.png
那就说明 root kloop kroot 没有问题
那个 8(随便写的)---看你的kpartx -av的输出而定--你这里是 11 ---  ...

uuid那一行没注释掉,不过貌似id不正确
我改改试一下...



点评

哦,那肯定会影响启动. 改还好应该可以跑起来了.  详情 回复 发表于 2020-6-12 21:19
回复

使用道具 举报

 楼主| 发表于 2020-6-12 21:19:20 | 显示全部楼层
本帖最后由 2011niumao 于 2020-6-12 21:22 编辑
2011hjcjie 发表于 2020-6-12 21:09
uuid那一行没注释掉,不过貌似id不正确
我改改试一下...

哦,那肯定会影响启动. 改好就应该可以跑起来了.应该更改为10cc----cda3那一串.
sudo losetup -d

点评

再次感谢楼主耐心解答! 已成功启动,固定vhd桌面更完美 squashfs桌面有点小问题...  详情 回复 发表于 2020-6-12 21:36
回复

使用道具 举报

发表于 2020-6-12 21:36:34 | 显示全部楼层
2011niumao 发表于 2020-6-12 21:19
哦,那肯定会影响启动. 改好就应该可以跑起来了.应该更改为10cc----cda3那一串.
sudo losetup -d

再次感谢楼主耐心解答!
已成功启动,固定vhd桌面更完美
squashfs桌面有点小问题...
回复

使用道具 举报

 楼主| 发表于 2020-6-12 21:42:25 | 显示全部楼层
祝贺!!!!慢慢调教吧.
回复

使用道具 举报

发表于 2020-6-14 17:20:31 | 显示全部楼层
niumao大佬,研究了vhd的linux这么多年了,还在跟新啊,

点评

每改进改善一点儿则得意忘形奔走相告.  详情 回复 发表于 2020-6-14 19:31
回复

使用道具 举报

 楼主| 发表于 2020-6-14 19:31:23 | 显示全部楼层
ql1307096 发表于 2020-6-14 17:20
niumao大佬,研究了vhd的linux这么多年了,还在跟新啊,

每改进改善一点儿则得意忘形奔走相告.

点评

论坛有你更精彩! 有现成的案例有兴趣更深入了解linux命令了,多谢! 如可能再发个UOS版的  详情 回复 发表于 2020-6-14 22:43
回复

使用道具 举报

发表于 2020-6-14 22:43:00 | 显示全部楼层
本帖最后由 2011hjcjie 于 2020-6-14 22:45 编辑
2011niumao 发表于 2020-6-14 19:31
每改进改善一点儿则得意忘形奔走相告.

论坛有你更精彩!
有现成的案例有兴趣更深入了解linux命令了,多谢!
如可能再发个UOS版的

还有打印机驱动貌似无epson stylus photo r230, 有点可惜了

点评

基本上是原版的配置,没有改动。可以自己打造好自己喜欢的系统再制作成squashfs文件,随身携带了  详情 回复 发表于 2020-6-15 14:32
回复

使用道具 举报

发表于 2020-6-15 10:08:17 | 显示全部楼层
昨天测试了一下,用virtualbox安装lubuntu20.04,按照之前的方法,发现配置文件有些出入,最后做出的文件,无法启动,出现initramfs,是新版的ubuntu配置文件有差异吗?以前用ubuntu15的时候,我直接解包initrd.img,然后修改相关文件后重新打包都可以启动的。不知道是不是换了gpt分区的原因?

点评

感觉还是参数配置不正确导致的。 gpt磁盘,kroot参数有可能是/dev/mapper/loop0p2 或者 /dev/mapper/loop0p3 因为微软在对GPT磁盘分区时候会有一两个保留分区的 可以直接在一楼百度云链接下载ubuntu 2004的引导  详情 回复 发表于 2020-6-15 14:26
回复

使用道具 举报

 楼主| 发表于 2020-6-15 14:26:34 | 显示全部楼层
本帖最后由 2011niumao 于 2020-6-15 14:27 编辑
ql1307096 发表于 2020-6-15 10:08
昨天测试了一下,用virtualbox安装lubuntu20.04,按照之前的方法,发现配置文件有些出入,最后做出的文件, ...

感觉还是参数配置不正确导致的。  gpt磁盘,kroot参数有可能是/dev/mapper/loop0p2 或者 /dev/mapper/loop0p3  因为微软在对GPT磁盘分区时候会有一两个保留分区的
另一个原因可能是引导时候使用的是没有改造过原始initrd.img文件。
可以直接在一楼百度云链接下载ubuntu 2004的引导文件vmlinuz2004 initrd.img2004 改名后用他们引导看看。
回复

使用道具 举报

 楼主| 发表于 2020-6-15 14:32:51 | 显示全部楼层
2011hjcjie 发表于 2020-6-14 22:43
论坛有你更精彩!
有现成的案例有兴趣更深入了解linux命令了,多谢!
如可能再发个UOS版的

基本上是原版的配置,没有改动。可以自己打造好自己喜欢的系统再制作成squashfs文件,随身携带了
回复

使用道具 举报

发表于 2020-6-16 09:36:25 | 显示全部楼层
2011niumao 发表于 2020-6-15 14:26
感觉还是参数配置不正确导致的。  gpt磁盘,kroot参数有可能是/dev/mapper/loop0p2 或者 /dev/mapper/loo ...

在虚拟机中,硬盘是mbr格式的,也只分了一个区,不知道为什么启动不了,很久以前做的一个ubuntu12.04的vhd反倒可以启动。肯定是我哪里配置错误了。另外,百度盘的速度实在是太太太坑了,您做好的squashfs文件,我下载了快一个星期了每天都不关电脑的,现在还没下载一半,平时速度就10几k,最快的时候不超过30k,建议可以换网盘了。

点评

哦,建议只下载两个引导文件,就是initrd.img-xxxx和vmlinuz ,其余的使用原版20.04自己安装即可.  详情 回复 发表于 2020-6-16 12:32
回复

使用道具 举报

 楼主| 发表于 2020-6-16 12:32:27 | 显示全部楼层
ql1307096 发表于 2020-6-16 09:36
在虚拟机中,硬盘是mbr格式的,也只分了一个区,不知道为什么启动不了,很久以前做的一个ubuntu12.04的vh ...

哦,建议只下载两个引导文件,就是initrd.img-xxxx和vmlinuz ,其余的使用原版20.04自己安装即可.
回复

使用道具 举报

发表于 2020-6-16 19:20:27 | 显示全部楼层
本帖最后由 ql1307096 于 2020-6-16 19:23 编辑

在virtual虚拟机里使用固定大小的vhd虚拟硬盘文件(没有启用efi,硬盘只分一个区),安装ubuntu20.04后,使用您提供的方法:
  1. mksquashfs mm tt/ubuntu/UBUNTU2004.squashfs -b 1M -comp xz -e tmp/mm tmp/tt
复制代码
生成了squashfs文件,并且准备了相关的启动文件及设置好grub2菜单。出现以下问题
1、使用系统里自带的vmlinuz和initrd,无法启动,出现initramfs;
2、使用您提供的vmlinuz-5.4.0-26-generic和initrd.img,可以成功启动,但是不是百分之百能启动,经常也会到initramfs里,按三键重启再进,有时候能启动有时候不能启动,碰运气一样。
3、使用您提供的vmlinuz-5.4.0-26-generic和initrd.img,启动vhd文件,失败,出现initramfs。
我的grub2文件:
  1. menuentry "UBUNTU2004-squashfs "  --class ubuntu  {
  2.                 insmod gzio
  3.                 insmod part_msdos
  4.                 insmod part_gpt
  5.                 insmod ext2
  6.                 insmod ntfs
  7.                 insmod probe
  8.                 set sfsfile="/casper/ubuntu20.04.squashfs"
  9.                 search --no-floppy -f --set=aabbcc  $sfsfile
  10. set root=${aabbcc}
  11.                 probe -u --set=ddeeff ${aabbcc}
  12.                 linux         /casper/vmlinuz-5.4.0-26-generic   root=UUID=${ddeeff} squashfs=$sfsfile  rw apparmor=0
  13.                 initrd         /casper/initrd.img-5.4.0-26-generic
  14.         }
复制代码
注:使用您提供的vmlinz和initrd文件,有时候能启动有时候不能启动,像碰运气一样的;使用我系统里自带的,从来没有启动成功过。
微信图片_20200616181911.jpg


另外引导vhd启动的菜单(使用您提供的vmlinz和initrd),不能启动,进入initramfs:
  1. menuentry 'ubuntu20_vhd' --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 /ubuntu20_vhd/ubuntu20.04.vhd
  11.         set root=${aabbcc}
  12.         probe -u --set=ddeeff ${aabbcc}
  13.         linux        /ubuntu20_vhd/vmlinuz-5.4.0-26-generic root=UUID=${ddeeff} vloop=/ubuntu20_vhd/ubuntu20.04.vhd vlooppart=p1
  14.         initrd        /ubuntu20_vhd/initrd.img-5.4.0-26-generic
  15. }
复制代码

点评

squashfs的菜单,没有问题.怀疑有时候自动探索uuid不能成立.可以尝试把linux语句中的root=更改为 这里ABCDE就是你的squashfs文件所在硬盘分区的标签, 不能有中文或空格. 可以尝试一下. 从图片上看是挂载根分区失败  详情 回复 发表于 2020-6-16 21:47
vloop vlooppart只是刚刚开始制作vhd时候使用的,基于别人的软件(vboot vmlimte), 很早就废止了. 现在使用的参数是 root kloop kroot . root不变, kloop是vhd文件名(带路径).kroot 是真正根设备名字, 你这里是 kro  详情 回复 发表于 2020-6-16 21:39
回复

使用道具 举报

 楼主| 发表于 2020-6-16 21:39:17 | 显示全部楼层
ql1307096 发表于 2020-6-16 19:20
在virtual虚拟机里使用固定大小的vhd虚拟硬盘文件(没有启用efi,硬盘只分一个区),安装ubuntu20.04后,使 ...

vloop vlooppart只是刚刚开始制作vhd时候使用的,基于别人的软件(vboot vmlimte),
很早就废止了.
现在使用的参数是 root kloop kroot . root不变, kloop是vhd文件名(带路径).kroot 是真正根设备名字,
你这里是 kroot=/dev/mapper/loop0p1把菜单的linux那一句改动如下
  1. linux        /ubuntu20_vhd/vmlinuz-5.4.0-26-generic root=UUID=${ddeeff} kloop=/ubuntu20_vhd/ubuntu20.04.vhd kroot=/dev/mapper/loop0p1
复制代码
其他不用变 应该可以启动.
至于squashfs系统. 还不清楚原因.一个是再检查引导参数,一个是在制作squashfs系统时候可以把/etc/fstab里面的 / 那一行开头加上几个 ###注释掉,好些.
回复

使用道具 举报

 楼主| 发表于 2020-6-16 21:47:05 | 显示全部楼层
本帖最后由 2011niumao 于 2020-6-16 21:50 编辑
ql1307096 发表于 2020-6-16 19:20
在virtual虚拟机里使用固定大小的vhd虚拟硬盘文件(没有启用efi,硬盘只分一个区),安装ubuntu20.04后,使 ...

squashfs的菜单,没有问题.怀疑有时候自动探索uuid不能成立.可以尝试把linux语句中的root=更改为
  1. root=LABEL=ABCDE
复制代码
这里ABCDE就是你的squashfs文件所在硬盘分区的标签, 不能有中文或空格.
  1. linux         /casper/vmlinuz-5.4.0-26-generic   root=LABEL=ABCDE  squashfs=$sfsfile  rw apparmor=0
复制代码

可以尝试一下.  从图片上看是挂载根分区失败, 不清楚原因.
回复

使用道具 举报

发表于 2020-6-17 09:27:19 | 显示全部楼层
2011niumao 发表于 2020-6-16 21:39
vloop vlooppart只是刚刚开始制作vhd时候使用的,基于别人的软件(vboot vmlimte),
很早就废止了.
现在使 ...

按照您的方法修改了启动参数,kloop,kroot,还是不能启动,出现initramfs,不过这次的错误跟之前的不一样;
另外我确认在制作squashfs之前,注释了/etc/fsta里的左右内容。

不知道是不是我的硬盘环境复杂了:1个120G固态盘(gpt)作为启动设备,一个3T机械盘(gpt)存放了squashfs文件,还有一个1T机械盘(mbr)
回复

使用道具 举报

发表于 2020-6-17 09:29:18 | 显示全部楼层
2011niumao 发表于 2020-6-16 21:47
squashfs的菜单,没有问题.怀疑有时候自动探索uuid不能成立.可以尝试把linux语句中的root=更改为
这里ABC ...

在grub2下一步一步的执行命令,启动是没有问题的,我怀疑是不是在某一步还没有生效的情况下就执行了下一条命令的原因呢?grub2里不知道能不能插入一个等待的命令?

点评

grub2里面命令行模式启动没有问题,那就很奇特了.只知道一种延迟时间的方式, 就是在linux语句中加入一条 rootdelay=90 ,意思是等90秒(?)后挂载根分区,也许有效. 此外这里的squashfs文件系统的启动模式是我利用ove  详情 回复 发表于 2020-6-17 12:55
回复

使用道具 举报

发表于 2020-6-17 09:36:43 | 显示全部楼层
本帖最后由 ql1307096 于 2020-6-17 10:20 编辑

另外我想在ubuntu20.04下自己制作initrd.img,但是看您的教程,这一段话我不知道该怎么理解:
2020-06-17_013005.png
是指需要把您的代码插入到
  1. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom"
  2.         run_scripts /scripts/local-bottom
  3.         [ "$quiet" != "y" ] && log_end_msg
  4. }
复制代码
这一段的前面吗?
这样制作的initrd文件,是可以启动vhd和squashfs的吧?注:ubuntu20.04的mkinitramfs文件里,没有# util-linux 这一段的(util-linux已安装),我把那段代码放在# module-init-tools这一节里不知道可行吗
用此方法制作的squashfs,能支持persistent参数吗?我昨天大概测试了一下,casper-rw文件放在ext4分区上,grub里加入了persistent,但是没有效果,不知道是ext4文件系统的原因还是其他?

点评

对以前的ubuntu的制作initrd.img的过程加了一些注释,基本过程不变.请参考附件看看  详情 回复 发表于 2020-6-17 13:40
回复

使用道具 举报

 楼主| 发表于 2020-6-17 12:55:08 | 显示全部楼层
本帖最后由 2011niumao 于 2020-6-17 12:56 编辑
ql1307096 发表于 2020-6-17 09:29
在grub2下一步一步的执行命令,启动是没有问题的,我怀疑是不是在某一步还没有生效的情况下就执行了下一 ...

grub2里面命令行模式启动没有问题,那就很奇特了.只知道一种延迟时间的方式,
就是在linux语句中加入一条 rootdelay=90 ,意思是等90秒(?)后挂载根分区,也许有效.

此外这里的squashfs文件系统的启动模式是我利用overlay机制另外单独实现的,
如果想使用传统的casper机制,需要在系统里安装一个软件,名字叫 casper?或者boot-casper?
记不清了. 安装以后再制作一次initrd.img ,才可以使用传统casper引导,
此时才能使用 casper-rw 文件和persistent. (引导时必须使用 boot=casper )
这种 casper引导就是系统光盘的引导,网上文章很多,可以百度看看.

回复

使用道具 举报

 楼主| 发表于 2020-6-17 13:40:03 | 显示全部楼层

README-UBUNTUKLOOP

本帖最后由 2011niumao 于 2020-6-17 13:44 编辑
ql1307096 发表于 2020-6-17 09:36
另外我想在ubuntu20.04下自己制作initrd.img,但是看您的教程,这一段话我不知道该怎么理解:

是指需要 ...

对以前的ubuntu的制作initrd.img的过程加了一些注释,基本过程不变.
主要是说明一下各个文件如何修改.
有一个变动是,在init文件里多修改了几处(一共修改四处),把引导参数
的小写转化为大写来使用了(可能不是必须的,但为了和整个init风格一致,故从之).

请参考附件里的pdf文件,有详细改动说明. readme-ubuntukloop.zip (421.26 KB, 下载次数: 10)
回复

使用道具 举报

发表于 2020-6-17 13:49:50 | 显示全部楼层
2011niumao 发表于 2020-6-17 13:40
对以前的ubuntu的制作initrd.img的过程加了一些注释,基本过程不变.
主要是说明一下各个文件如何修改.
...

感谢感谢,我再试试看,

点评

刚才那个附件是基于UBUNTU 1804 LTS的 关于ubuntu 20.04LTS的init文件,只有那个nosuid语句在后面了.所有改动是一样的. 看图可知.  详情 回复 发表于 2020-6-17 14:55
回复

使用道具 举报

 楼主| 发表于 2020-6-17 14:55:45 | 显示全部楼层
ql1307096 发表于 2020-6-17 13:49
感谢感谢,我再试试看,

刚才那个附件是基于UBUNTU 1804 LTS的
关于ubuntu 20.04LTS的init文件,只有那个nosuid语句在后面了.所有改动是一样的. initubt2004kloop.zip (104.06 KB, 下载次数: 10)

ubuntu 20.04 init

ubuntu 20.04 init
回复

使用道具 举报

发表于 2020-6-21 16:49:28 | 显示全部楼层

Windows下将GRUB2装入memdisk

本帖最后由 ql1307096 于 2020-6-21 16:54 编辑
2011niumao 发表于 2020-6-17 14:55
刚才那个附件是基于UBUNTU 1804 LTS的
关于ubuntu 20.04LTS的init文件,只有那个nosuid语句在后面了.所有 ...

感谢感谢,按照您提供的方法,ubuntu20.04成功实现了vhd启动和squahfs启动。另外将您的教程综合我的经历重新整理了一份文档,分享给有需要的人吧。
KLOOP教程-UBUNTU篇.7z (13.8 KB, 下载次数: 24)

点评

真棒!!!!  发表于 2020-6-21 20:50
回复

使用道具 举报

发表于 2020-8-20 22:21:12 | 显示全部楼层
反向爬了10几层,还是没搞明白,求大神们帮忙。
我想启动自己的vhd,Ubuntu2004的。
U盘引导,镜像在电脑第二个硬盘上,该盘只有一个分区
在选择指定的引导后,电脑不显示任何内容,改变显示器连接后屏幕左上角出现一个光标,但不能输入内容,这是什么情况?
引导的内容是参考最近一个大佬的总结写的
回复

使用道具 举报

发表于 2020-8-20 22:24:29 | 显示全部楼层
虚拟机我装了两个2004,第二个是我今天重新装的,按照ql1307096同学分享的总结操作的,还是不行。
回复

使用道具 举报

发表于 2020-8-20 22:31:50 | 显示全部楼层
我感觉我主要是几个点没明白
①kroot=/dev/mapper/loop0p2
这个loop0p2的意思是第一盘的第三分区吗?
②虚拟机内/etc/fstab应该怎么改
我自己改了一个,然后虚拟机挂掉了,进不了系统了,还好操作之前备份了整个vhd
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 12:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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