无忧启动论坛

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

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

    [复制链接]
211#
 楼主| 发表于 2021-3-11 22:51:57 | 显示全部楼层
本帖最后由 2011niumao 于 2021-3-11 22:54 编辑
piazini 发表于 2021-3-11 14:09
引导单数?是什么没懂。我用同一个vhd文件,一个新做的initrd.img-5.4.0-42-generic(新)60M、另一个以 ...

检查init文件的权限,让其有可执行权限。 也许能行。
(引导单数应该改为引导参数,就是引导时候你告诉机器的root kloop kroot这几个的值是不是正确)




回复

使用道具 举报

212#
 楼主| 发表于 2021-3-13 22:43:07 | 显示全部楼层
本帖最后由 2011niumao 于 2021-3-13 22:44 编辑
friend8179 发表于 2021-3-13 08:53
楼主,第一关就卡住了,理论上解压出来是UBUNTU2004.squashfs这一个文件,我的7z解压出来是个文件夹

不推荐下载做好的系统,推荐自己在win下制作固定大小vhd(16G或更大),霍清华开源镜像网站下载官方的ubuntu iso
在VirtualBox虚拟机安装好安装,再依照mydracut里的教程制作initrd.img。
回复

使用道具 举报

213#
 楼主| 发表于 2021-4-20 11:43:05 | 显示全部楼层
piazini 发表于 2021-4-19 22:33
LZ想请教下,显卡的安装。因为我在网上找的教程都是磁盘上划分区来装的系统,找了好久也没找到VHD系统里的 ...

开源驱动一般足够使用,不推荐安装专有驱动。对于N卡,确有需要安装时,
先下载驱动文件,命令行下安装。最好安装以前使用mksquashfs命令备份一下系统。
回复

使用道具 举报

214#
 楼主| 发表于 2021-5-14 08:32:07 | 显示全部楼层
毛病是没有正确挂载vhd文件所在的硬盘分区。保险的话,重新把所有手续过一遍:
就是重新编译安装ntfs-3g,重新编辑各个文件,重新生成新的initrd.img。

点评

谢谢大佬回复,我再看看  详情 回复 发表于 2021-5-14 17:17
回复

使用道具 举报

215#
 楼主| 发表于 2021-5-14 19:14:07 | 显示全部楼层
songjl1995 发表于 2021-5-14 18:31
还是不行
我看现在帖子里这一部分
        ########################################################## ...

ubuntukloopnew.zip (406.8 KB, 下载次数: 17)

看看附件,附件是新版本的。注意init文件的大小写。

点评

收到,谢谢大佬  详情 回复 发表于 2021-5-15 09:32
回复

使用道具 举报

216#
 楼主| 发表于 2021-5-24 17:23:19 | 显示全部楼层
songjl1995 发表于 2021-5-24 16:19
大佬,我研究了半天卡在一个小问题上
关于vmlinuz
我是ubuntu20.04

这个说法有问题。vmlinuz一般没有问题的。可能你在制作initrd.img时候是使用的是5.8.0-44内核。
你需要把内核版本号附加在mkinitramfs后面如下。这样得到指定版本号的initrd.img.
  1. sudo mkinitramfs  -o initrd.img-myinitrd 5.8.0-54-generic
复制代码

点评

大佬厉害,现在解决了。感谢,真的太感谢了  详情 回复 发表于 2021-5-24 17:43
我之前输入的命令是这样的 然后复制到启动的路径下的  详情 回复 发表于 2021-5-24 17:40
回复

使用道具 举报

217#
 楼主| 发表于 2021-6-1 08:34:26 | 显示全部楼层
piazini 发表于 2021-5-31 21:35
楼主,经过使用在Docker里load总共15G左右的images时就会卡死,无意间在字符界面发现了问题,下图,网上 ...

这个就不会了。bufffer i/o问题历史悠久,不知道应该怎么解决。实际上之所以手动编辑 ntfs-3g,就是为了解决这一问题的。现在看可能只是部分解决了。需要高手来了。
回复

使用道具 举报

218#
 楼主| 发表于 2021-6-3 15:33:07 | 显示全部楼层
piazini 发表于 2021-6-2 11:02
看错误提示,echo0说明系统也发现吞吐量不够,尝试优化,但是失败了。我是手动执行sync命令,写了个while ...

我一般使用windows系统自己创建固定大小vhd,初始化格式化为ntfs完毕,在ubuntu下再格式化为ext4. 感觉这样性能好些。
从来没有扩容过vhd。有时候需要扩容。是使用mksquashfs命令备份整个系统为squashfs文件,
再在旧系统或删除旧系统后直接启动到squashfs文件系统里使用rsync命令恢复到新vhd分区里,修改/etc/fstab文件里面的根分区的uuid即可。
回复

使用道具 举报

219#
 楼主| 发表于 2021-12-23 19:28:50 | 显示全部楼层
ql1307096 发表于 2021-12-23 14:33
niumao大佬还在不忘初心的修改vhd版ubuntu啊。上个月下载了20.04版再公司电脑用正常,回家里电脑测试不行, ...

应该是时间久了不断升级,把以前修改的文件还原为原始版本了,主要是init local mkinitramfs这几个文件。需要重新编辑一下,重新制作一下initrd.img。
回复

使用道具 举报

220#
 楼主| 发表于 2022-8-18 10:06:49 | 显示全部楼层
本帖最后由 2011niumao 于 2022-8-18 10:12 编辑

这两天把ntfs-3g升级为2021版了,把grubsmall升级为2022版了,写了一个详细的 pdf 的新教程,

制作vhd的UBUNTU.pdf


简化了代码也简化了一些操作。
在虚拟机内可以直接复制粘贴 pdf 教程里的命令和代码,这样就对网友们友好多了。

有兴趣可以去第一楼所给百度云链接下载。

新的grubsmall的菜单针对的是,
vhd文件名为 ubt.vhd ,和两个引导文件 vmlinuz initrd.img 一起放在一个硬盘根分区下

如果你的部署与此不同,根据具体情况编辑grub2菜单来调整引导参数。
回复

使用道具 举报

221#
 楼主| 发表于 2022-8-18 10:29:03 | 显示全部楼层
rhinomax 发表于 2022-3-29 08:21
可以引导vhd的manjaro吗?

这是基于ARCH的,也是可以的,只是把kpartx 改用 partx 命令。做法参考mydracut里面的arch目录。
回复

使用道具 举报

222#
 楼主| 发表于 2022-8-19 13:01:31 | 显示全部楼层
本帖最后由 2011niumao 于 2022-8-19 16:13 编辑



依照mydracut教程里制作的Fedora.vhd与Fedora.squashfs系统近一段时间总是启动不了,这两天查明了原因。
第一点,引导参数 root=UUID=XXXXXXXXXXXXXXX 不知什么原因导致内核不能识别。可以放弃使用自动探测UUID这一做法,编辑grub2菜单,把root参数改用vhd文件或squashfs文件所在分区的卷标(必须全英文)。
第二点,如果出现与UID 1000用户 有关的引导错误,在grub2的菜单linux语句的后面加入 selinux=0, 如下
  1. linux         /vmlinuz  root=LABEL=XXXX  kloop=/Fedora.vhd kroot=/dev/mapper/loop0p1 selinux=0
复制代码
回复

使用道具 举报

223#
 楼主| 发表于 2022-8-23 20:57:36 | 显示全部楼层

第一楼原来的百度云共享就是
回复

使用道具 举报

224#
 楼主| 发表于 2022-8-23 21:01:18 | 显示全部楼层
piazini 发表于 2022-8-23 15:34
下图,图一:GRUB4DOS.PNG

怀疑是不是不认识SSD的缘故。可以把引导和菜单都写在优盘上,也许可行。
我现在就是这样处理,对于电脑原来的引导基本不触动。所有引导放在优盘上。
优点是安全,不会破坏电脑自己的引导。缺点是每次需要单插一个引导优盘。
回复

使用道具 举报

225#
 楼主| 发表于 2022-9-1 21:14:09 | 显示全部楼层
引导时候出现的Buffer I/O errors 有些是无害的可以忽略:
https://blog.csdn.net/weixin_343 ... tm_relevant_index=1
A server using a LUN, which is presented by a storage array through fabric channels, may show buffer I/O errors while the server is booting or commands such as fdisk and vgscan are being run. The access can be a read or write attempt. These messages are sometimes harmless. When using PowerPath, these errors are suppressed. However, in the case where Linux native multipathing is used, there is no automatic provision for filtering these messages.

The errors can occur when using an active/passive storage array, such as EMC Clarion series. These types of SANs contain two storage processors. LUNs are assigned to only one of the processors at the time of LUN creation. The LUN can receive I/O only via that one processor. The other processor is passive; it acts as a backup, ready to receive I/O if the active controller fails, or if all paths to the LUN via the active controller fails.

Paths to the LUN going via the passive controller are passive paths and will generate an I/O errors should I/O be sent over them. At bootup, the kernel's SCSI mid-layer scans all paths to find devices. Thus it will scan both active and passive paths and will generate buffer I/O errors for the passive paths.

This is a normal behavior for Linux native multipath, and the errors do not indicate an array issue. The errors can safely be filtered through the OS logging configuration or the user can avoid access to native devices (as opposed to using /dev/mapper devices). Alternatively, a qualified version of PowerPath may be installed, which will automatically filter these errors.
回复

使用道具 举报

226#
 楼主| 发表于 2022-9-13 12:12:18 | 显示全部楼层
本帖最后由 2011niumao 于 2022-9-13 12:20 编辑
songjl1995 发表于 2022-9-13 11:25
楼主,我根据《制作vhd的UBUNTU.pdf》用ubuntu2204试了下没成功,这个新系统是本身就不行吗?

新系统ubuntu 22.04也没有问题可以制作成功的。你需要仔细检查制作过程,是不是都写对了。尤其是几个脚本的修改一定要核对。

刚刚给百度云盘(还是一楼那个链接)上传了我制作好的能引导固定vhd的内存初始镜像文件,你可以下载vmlinuz2204与 initrd.img2204后使用这两个文件引导看看。当然grub2的菜单需要自己修订一下。或者可以把两个文件名里的2204删除直接用原来菜单也行。

vmlinuz2004   initrd.img2004 具体的版本号是  5.15.0-46
vmlinuz2204   initrd.img2204 具体的版本号是  5.15.0-47

点评

用了大佬做的可以,我原先的Ubuntu20.04升级到22.04,自己做的重新查了边,把ntfs-3g的修改也加上了,目前可以了。 但是我自己重新做的ubuntu2204 vhd就不行,用您的也不行,是不是vhd在安装的时候出现逻辑分区了呀  详情 回复 发表于 2022-9-14 17:02
谢谢大佬,这么及时的回复我,我先用您这个试试,然后再检查看看。  详情 回复 发表于 2022-9-13 15:04
回复

使用道具 举报

227#
 楼主| 发表于 2022-9-14 18:08:02 | 显示全部楼层
本帖最后由 2011niumao 于 2022-9-14 18:11 编辑
songjl1995 发表于 2022-9-14 17:02
用了大佬做的 initrd.img2204可以了,是我原先的Ubuntu20.04升级到22.04。
我自己做的重新查了边,把ntf ...

请说明一下出错的地方和出错的状态,以便排查原因。
比如,没有挂载好根目录失败---有可能是grub2菜单中 root=UUID=XXXXXX 那一段失效,可以用root=LABEL=XXXXX代替。以便正确识别挂载vhd文件所在的ntfs分区。另外注意动态 vhd 是 不行的,必须是固定大小的vhd, 最好是windows系统里管理工具创建的,这样成功率最大。如果没有编译安装ntfs-3g也不会正确挂载ntfs分区。
回复

使用道具 举报

228#
 楼主| 发表于 2022-9-27 13:55:00 | 显示全部楼层
Sandro 发表于 2022-9-27 10:10
请问不支持动态扩展大小的VHD是因为kpartx/partx的限制吗?

是的。可以使用nbd方式启动到动态大小硬盘,但有反应卡顿。

点评

谢谢!nbd方式是指qemu-nbd吗?同时需要内核支持nbd?  详情 回复 发表于 2022-9-27 18:07
回复

使用道具 举报

229#
 楼主| 发表于 2022-9-28 18:51:34 | 显示全部楼层
Sandro 发表于 2022-9-27 18:07
谢谢!nbd方式是指qemu-nbd吗?同时需要内核支持nbd?

是。
回复

使用道具 举报

230#
 楼主| 发表于 2022-10-4 11:12:57 | 显示全部楼层
本帖最后由 2011niumao 于 2022-10-4 11:22 编辑
yzarc777 发表于 2022-10-3 22:57
根据网盘的pdf修文件后启动的系统是只读的
系统是mx linux 内核5.18.0
固定大小的vhd

如果启动时候,vhd文件所在分区是只读挂载时,vhd文件里的根分区也只能只读挂载---这样不能正确启动。
修正方法是,关闭windows的安全启动,快速启动模式。在windows系统下对vhd所在分区做一次磁盘分区检查,再重启就可以了。
回复

使用道具 举报

231#
 楼主| 发表于 2022-10-12 21:56:41 | 显示全部楼层
piazini 发表于 2022-10-12 20:41
大佬,这次的pdf文件总结的太好了,以前都是自己研究好,在总结出来,现在直接图文的,很明白。   
   
...

好的,谢谢提醒,会修订!
回复

使用道具 举报

232#
 楼主| 发表于 2022-10-13 09:47:02 | 显示全部楼层
本帖最后由 2011niumao 于 2022-10-13 09:54 编辑
piazini 发表于 2022-10-12 23:02
大佬好,用你的 " 制作vhd的ubuntu公共版.pdf " 制作 ubbuntu 22.04 启动VHD出现这个。

在虚拟机里 ...

这个是vhd文件里面的根分区没有正确挂载。请仔细核对或重新制作一下内核初始镜像 initrd.img。
估计有一些语法错误的。特别要查看local文件里新加入的语句中,if 语句的 [ ]里面的空格,比如


  1. if  [  -z   "$KLOOP"   ]  &&   [   -z    "$SQUASHFS"    ] ; then
  2. 。。。。。。。。。
  3. if     [      -n         "$KLOOP"        ];      then
复制代码
我在空格上面栽过多次的。(那个pdf文件里代码的空格表现不明显)。



回复

使用道具 举报

233#
 楼主| 发表于 2022-10-13 22:32:50 | 显示全部楼层
brux 发表于 2022-10-13 20:24
谢谢。
请问linux mint 21 也适用吗

可以的,mint基于ubuntu,做法应该一样。
回复

使用道具 举报

234#
 楼主| 发表于 2022-10-13 22:38:28 | 显示全部楼层

可能vhd所在硬盘分区有错误了,在windows下作一次磁盘分区检测即可。
也可能是vhd文件内部分区有错,这时可以在win下Vbox启动时在grub2菜单 linux语句后加上 recovery
然后引导,选择磁盘根分区检测,即可。
回复

使用道具 举报

235#
 楼主| 发表于 2022-10-15 13:47:42 | 显示全部楼层
本帖最后由 2011niumao 于 2022-10-15 14:08 编辑
  1. menuentry "启动 ubt.vhd 2" --class ubuntu {
  2.         set gfxpayload=keep
  3.         set root=(hd1,3)
  4.         search --no-floppy -f --set=aabbcc /VHD/osmint/osmint/osmint.vhd
  5.         set root=${aabbcc}
  6.         probe -u --set=ddeeff ${aabbcc}
  7.         linux         /VHD/osmint/osmint/vmlinuz  root=UUID=${ddeeff}  kloop=/VHD/osmint/osmint/osmint.vhd kroot=/dev/mapper/loop0p2
  8.         initrd        /VHD/osmint/osmint/initrd.img
  9. }
复制代码

第一,按照你的描述,菜单里面,应该是/dev/mapper/loop0p3
第二,root=UUID=${ddeeff}这个没错,但经常也导致引导失败,主要是那个检测取得UUID的grub2功能
在有的机器上---特别是UEFI引导时---会有问题,此外UUID过长会导致分区识别错误(怀疑是不是root参数有长度限制,过长则截断了所以参数值错误)。
可以更改为 root=/dev/sdaX 这种格式,或者 root=/dev/LABEL/XXX 这中格式,当然卷标XXX必须纯英文。
第三,这个 /VHD/osmint/osmint/osmint.vhd 也太长了,会不会超过参数值的允许长度呢?最好是把vhd文件放在根分区下或者一级子目录下。目录太深长,不仅可能被截断,即使引导成功也会很卡顿的(我有过经验的)。

点评

安装了ubuntu2204,一次搞定,就是开机稍微久点。 mint就是不行。  详情 回复 发表于 2022-10-16 16:52
谢谢大佬的耐心回复 更改了vhd路径到C盘 /VHD文件夹下,使用root=UUID=248681088680DC24 也还是无法启动。 请问下 root=UUID=, 和root=/dev/sdaX, root=/dev/LABEL/XXX 这里的root还是vhd所在硬盘分区吧。  详情 回复 发表于 2022-10-15 22:02
回复

使用道具 举报

236#
 楼主| 发表于 2022-10-15 13:58:53 | 显示全部楼层
本帖最后由 2011niumao 于 2022-10-15 14:05 编辑
huggsy 发表于 2022-10-15 11:07
继续学习。我在MBR模式下成功,但EFI模式下进不去。

赞!!!  EFI模式引导,我有大量失败例子和成功例子。

主要原因是grub2的一些功能,比如查找文件,查找到文件后获取所在分区UUID等等。在UEFI模式下失效或者不能启动,导致系统找不到根分区。可以说 grub2的一些功能在UEFI模式下被阉割了。

UEFI下要把菜单写死,不再考虑通用性。比如
  1. menuentry "UBT.vhd" --class ubuntu {
  2.         set gfxpayload=keep
  3.         insmod gzio
  4.         insmod part_msdos
  5.         insmod part_gpt
  6.         insmod ext2
  7.         insmod ntfs
  8.         insmod probe
  9.         set vhdfile=/texlive/ubt.vhd
  10.         set root=(hd0,1)
  11.         search.fs_uuid C850086250085998 root  
  12.         linux        /texlive/vmlinuz2004   root=UUID=C850086250085998 kloop=$vhdfile   kroot=/dev/mapper/loop0p2  selinux=0 audit=0
  13.         initrd        /texlive/initrd.img2004
  14. }
复制代码

这里使用的是先找到vhd文件所在分区的UUID  C850086250085998,写死在菜单里。这种写法UEFI下引导成功。
search.fs_uuid C850086250085998 root
这条grub2命令是 查找指定UUID的分区,并把它设为根分区。

回复

使用道具 举报

237#
 楼主| 发表于 2022-10-16 10:12:13 | 显示全部楼层
本帖最后由 2011niumao 于 2022-10-16 10:28 编辑
brux 发表于 2022-10-15 22:02
谢谢大佬的耐心回复

更改了vhd路径到C盘 /VHD文件夹下,使用root=UUID=248681088680DC24 也还是无法启 ...

是,root总是指vhd文件所在分区。其中,sdaX指分区序号,主分区1,2,3,4,逻辑分区是 5 6 7 这样的。
LABEL指卷标,不能有汉字,只能是英文。

另外,这些只是排查引导信息错误。其实更应该注意 local 文件里的语法错误,特别是各个 if 语句中方括号[ ]里的空格问题。很多错误都源自于local文件里的错误。
回复

使用道具 举报

238#
 楼主| 发表于 2022-10-16 10:21:25 | 显示全部楼层
本帖最后由 2011niumao 于 2022-10-16 10:33 编辑
piazini 发表于 2022-10-15 21:48
2011niumao大佬,

在ubt18.04的VHD扩容,直接用 DiskGenius 克隆功能,复制到新 VHD 文件里,就完成扩容 ...

使用DG来扩容的问题我不理解,有可能是根分区的UUID与原始系统不同,需要手工编辑/etc/fstab文件里的根分区信息。
推荐一种我用的方法,主要是在ubuntu系统下把现有的ubuntu系统复制到另一个vhd里去:

在windows下制作一个新的容量很大的固定大小vhd。在VBox中把这个新vhd附加到ubuntu系统中,启动到旧ubuntu中,然后把根分区,新vhd挂载到两个临时目录内,使用rsync命令复制旧系统文件到新vhd内。最后手工编辑新vhd内/etc/fstab文件,把根分区UUID修改正确即可。这些操作也可以在电脑启动到vhd内ubuntu系统里后进行的。主要命令如下
  1.     sudo mkdir /tmp/mm /tmp/tt
  2.     sudo mount /dev/mapper/loop0p2 /tmp/mm
  3.     sudo mount /dev/mapper/loop1p2 /tmp/tt
  4.     sudo rsync -SHav /tmp/mm/* /tmp/tt/
复制代码

回复

使用道具 举报

239#
 楼主| 发表于 2022-10-16 10:41:40 | 显示全部楼层

local文件里增加的代码,注意空格

本帖最后由 2011niumao 于 2022-10-16 10:43 编辑
  1. if  [    -n    "$KLOOP"   ] ;  then
  2.         ### reset the value of the root variable
  3.         HOSTDEV="${ROOT}"
  4.         NEWROOT="${rootmnt}"
  5.         [   -n    "$KROOT"   ]   &&   ROOT="$KROOT"
  6.         [   -n    "$KROOT"   ]     ||       ROOT="/dev/loop0"
  7.         export    ROOT
  8.         realroot="$ROOT"
  9.         ###  auto probe the fs-type of the partition in which vhd-file live and mount it  /host
  10.         mkdir   -p    /host
  11.         if [    -e   ${NEWROOT}${KLOOP}    ] ;   then
  12.                 mount    --move    $NEWROOT /host
  13.         else        
  14.                 if   [    -z    "$HOSTFSTYPE"   ] ;    then
  15.                         HOSTFSTYPE="$(blkid   -s   TYPE   -o   value "${HOSTDEV}")"
  16.                         [   -z    "$HOSTFSTYPE"    -o   "${HOSTFSTYPE}"   =   "ntfs"  ]   &&   HOSTFSTYPE="ntfs-3g"
  17.                 fi
  18.                 [   "${HOSTFSTYPE}"    =    "ntfs-3g"   ]   ||   modprobe    ${HOSTFSTYPE}
  19.                 mount    -t    ${HOSTFSTYPE}   -o   rw     ${HOSTDEV}      /host
  20.         fi
  21.         ### mount the vhd-file on a loop-device
  22.         if    [    "${KLOOP#/}"    !=     "${KLOOP}"   ]  ;   then               
  23.                 modprobe  loop  
  24.                 kpartx     -av     /host${KLOOP}
  25.                 [   -e    "$realroot"    ]    ||     sleep 3
  26.         fi
  27.         ### mount the realroot / in vhd-file on $NEWROOT
  28.         if    [   -z   "${KLOOPFSTYPE}"    ] ;    then
  29.                 KLOOPFSTYPE="$(blkid   -s   TYPE   -o   value   "$realroot")"
  30.                 [   -z   "${KLOOPFSTYPE}"   ]    &&    KLOOPFSTYPE="ext4"
  31.         fi
  32.         [   -e    "$realroot"    ]     ||     sleep 3
  33.         mount    ${roflag}    -t    "${KLOOPFSTYPE}"      $realroot        $NEWROOT
  34. fi
复制代码
回复

使用道具 举报

240#
 楼主| 发表于 2022-10-16 10:57:20 | 显示全部楼层

local文件修订注意空格

  1. if   [  -z   "$KLOOP"   ]  ;    then

  2.         if [ "${readonly}" = "y" ] && \
  3.            [ -z "$LOOP" ]; then
  4.                 roflag=-r
  5.         else
  6.                 roflag=-w
  7.         fi

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

  10.         checkfs ${ROOT} root

  11.         # FIXME This has no error checking
  12.         # Mount root
  13.         mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
  14.         mountroot_status="$?"
  15. fi
复制代码
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-5 16:04

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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