无忧启动论坛

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

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

    [复制链接]
571#
发表于 2022-10-12 15:02:44 | 只看该作者
2011niumao 发表于 2022-8-18 10:06
这两天把ntfs-3g升级为2021版了,把grubsmall升级为2022版了,写了一个详细的 pdf 的新教程,

制作vhd的 ...

大佬,有个建议,你这更新了,能不能在首页记录一下,更新时间和更新说明在几楼,
比如这次:2022-08-18更新,详细说明在 526#楼 链接 http://bbs.wuyou.net/forum.php?m ... &fromuid=349519[/url]
这次是刚巧了看到了,怕回复多,不能及时看到最新的更新介绍

点评

好  发表于 2022-10-12 21:57
回复

使用道具 举报

572#
发表于 2022-10-12 20:41:15 | 只看该作者
本帖最后由 piazini 于 2022-10-12 23:29 编辑

大佬,这次的pdf文件总结的太好了,以前都是自己研究好,在总结出来,现在直接图文的,很明白。   
   
错误反馈。  
问题一:文件“制作vhd的ubuntu公共版.pdf”,第15页,           
            1.  虚线框里 ./configue  应该是 ./configure ,缺少了个r   ;
            2.  虚线框里 sudo make install 的 make 和 install 中间空格不明显,容易看成 makeinstall  ;
            3.  虚线框里 cd 后面应该是  cd ../ 吧  ;

问题二:文件“制作vhd的ubuntu公共版.pdf”,第21页,在脚本中没有 " local_premountroot " 只有 " local_premount " ,
            pdf 截图中也是不带root的     
问题三:文件“制作vhd的ubuntu公共版.pdf”,第20页,unset KLOOP=   截图中没有=号,但是 右侧虚线框里的有=号   

问题四:文件“制作vhd的ubuntu公共版.pdf”,第21页,if [ -z "$kloop" ] ; then kloop 是大写还是小写,pdf的23页截图是大写   




点评

应该是大写  发表于 2022-10-13 22:40
好的,谢谢提醒,会修订!  详情 回复 发表于 2022-10-12 21:56
回复

使用道具 举报

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

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

使用道具 举报

574#
发表于 2022-10-12 23:02:41 | 只看该作者
本帖最后由 piazini 于 2022-10-13 16:08 编辑


-


大佬好,用你的 " 制作vhd的ubuntu公共版.pdf " 制作 ubbuntu 22.04 启动VHD出现这个。

在虚拟机里安装好,是三个分区,我只把 ubuntu 的/目录分区,复制到了VHD ,和这个有没有关系?

还有引导,我也是用grub之前能启动18.04的VHD,和这个有没有关系?


--------------------------------------------------------------
2022-10-13_1535 更新:

确实和大佬说的,上面两张图都是空格的事。在这里回复,方便大家看到解决方法。   

1. 在 文件 " 制作vhd的ubuntu公共版.pdf ",第22页,有个 " ntfs-3g " 从pdf 复制到文件里变成 "  ntfs  -3g",两处都多了个空格;
2. 为了保险起见,又将  if后的方括号和分号间的空格全部替换了,  原来是 " ]   ;   then" 改成  " ];   then"
就是要多仔细检查,先看看行数对不对,再看有没有多空格。

回复

使用道具 举报

575#
 楼主| 发表于 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文件里代码的空格表现不明显)。



回复

使用道具 举报

576#
发表于 2022-10-13 15:40:22 | 只看该作者
本帖最后由 piazini 于 2022-10-15 21:28 编辑

下图一:

-
下图二

-
下图三

-
下图四

-
下图五



大佬,又出新状况了,
图一到图三,是启动过程的显示的,有一些显示 OK 了,有一些还不行。
图二就一直那样,到了 1分30秒后,才又继续执行
到图三就不动了,按了回车,就出现图四;
图五,我尝试输入 xstart 命令,想启动桌面,结果不成功

这是哪块的问题?   
--------------------------------------------------------------------------------------
2022-10-15 更新 :

解决方法:
1. 反复看 楼主的 pdf 文档,所有的细节都在里面了。
2. 函数里多余的空格删掉以外,我还把函数里多余的空行都删了。
3. 还有一点,经过测试,用Ubuntu22.04 的 iso 安装完的 VHD 就能正常引导,
如果是直接新创建一个VHD文件,用  DiskGenius 的克隆功能,
把旧 VHD 文件内容,克隆到新VHD里,引导就不成功或出现各种启动错误,如上面几张图。










回复

使用道具 举报

577#
发表于 2022-10-13 19:19:41 | 只看该作者
很实用的教程,多谢楼主了
回复

使用道具 举报

578#
发表于 2022-10-13 20:24:15 | 只看该作者
谢谢。
请问linux mint 21 也适用吗

点评

可以的,mint基于ubuntu,做法应该一样。  详情 回复 发表于 2022-10-13 22:32
回复

使用道具 举报

579#
 楼主| 发表于 2022-10-13 22:32:50 | 只看该作者
brux 发表于 2022-10-13 20:24
谢谢。
请问linux mint 21 也适用吗

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

使用道具 举报

580#
 楼主| 发表于 2022-10-13 22:38:28 | 只看该作者

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

使用道具 举报

581#
发表于 2022-10-14 06:33:35 | 只看该作者
谢谢大佬,

你的 " 制作vhd的ubuntu公共版.pdf "
第20页
unset KLOOP
unset KROOT
unset HOSTFSTYPE
unset KLOOPFSTYPE

后面都有=

实际应该是不要=的吧?

点评

是得,笔误挺多!  发表于 2022-10-14 13:22
回复

使用道具 举报

582#
发表于 2022-10-14 12:11:11 | 只看该作者
新的折腾目标。学习下。
回复

使用道具 举报

583#
发表于 2022-10-14 16:58:47 | 只看该作者
先收藏,过段时间再学习。
回复

使用道具 举报

584#
发表于 2022-10-14 17:05:16 | 只看该作者

错误


vhd在hd1 硬盘 gpt3


vhd 里的 mint 系统分区如上 /分区在第三个区

请帮忙看下是否是菜单错误的问题
menuentry "启动 ubt.vhd 2" --class ubuntu {
        set gfxpayload=keep
        set root=(hd1,3)
        search --no-floppy -f --set=aabbcc /VHD/osmint/osmint/osmint.vhd
        set root=${aabbcc}
        probe -u --set=ddeeff ${aabbcc}
        linux         /VHD/osmint/osmint/vmlinuz  root=UUID=${ddeeff}  kloop=/VHD/osmint/osmint/osmint.vhd kroot=/dev/mapper/loop0p2
        initrd        /VHD/osmint/osmint/initrd.img
}


按大佬的 " 制作vhd的ubuntu公共版.pdf " 尝试了好多次 都不成功
不知道是不是local,init文件的问题, linuxmint 的 和 你提供的 ubuntu 的有些不一样


点评

第一,按照你的描述,菜单里面,应该是/dev/mapper/loop0p3 第二,root=UUID=${ddeeff}这个没错,但经常也导致引导失败,主要是那个检测取得UUID的grub2功能 在有的机器上会有问题,此外UUID过长会导致分区识别  详情 回复 发表于 2022-10-15 13:47
对了 另外还写了个菜单 kroot=/dev/mapper/loop0p3 也一样的结果  详情 回复 发表于 2022-10-14 17:17
回复

使用道具 举报

585#
发表于 2022-10-14 17:17:19 | 只看该作者

对了  另外还写了个菜单
kroot=/dev/mapper/loop0p3
也一样的结果
回复

使用道具 举报

586#
发表于 2022-10-15 11:07:49 | 只看该作者
继续学习。我在MBR模式下成功,但EFI模式下进不去。

点评

赞!!! EFI模式引导,我有大量失败例子和成功例子。 主要原因是grub2的一些功能,比如查找文件,查找到文件后获取所在分区UUID等等。在UEFI模式下失效或者不能启动,导致系统找不到根分区。可以说 grub2的一些功  详情 回复 发表于 2022-10-15 13:58
回复

使用道具 举报

587#
 楼主| 发表于 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
回复

使用道具 举报

588#
 楼主| 发表于 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的分区,并把它设为根分区。

回复

使用道具 举报

589#
发表于 2022-10-15 21:48:15 | 只看该作者
本帖最后由 piazini 于 2022-10-15 22:09 编辑

2011niumao大佬,

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

但是在ubt22.04里,我用这样的方法,引导就会出现不同的错误,虽然能引导成功(并不是每次都成功),
启动过程中有好多"失败",有部分显示“OK”,所以用ISO镜像安装完的VHD文件,引导启动时都显示OK。

initrd.img 和 vmlinuz 是没问题的(备份、替换、编译initrd.img都是我写好的脚本自动完成的),
用ISO安装时,分区里有个安装 “引导器” ,是不是克隆时候 ,引导器克隆不过去,DiskGenius 克隆是按文件访问的,底层数据读不到。

经过测试,ISO 镜像安装时,"引导器"不管装在 sda 还是 sda1 用 DiskGenius 克隆后,VHD启动都不正常。

是和用ntfs-3g_ntfsprogs-2021.8.22-fixed.zip 有关系么? 之前 ubt18 用的是2017的那个。

我还发现,用ISO装完的VHD 显示扇区是 33 , 0~32是不是"引导器",但用 DiskGenius 克隆后的VHD 扇区是 2 。

那扩容要怎么弄才能最方便呢? 不能扩容就要重装一次系统吧



回复

使用道具 举报

590#
发表于 2022-10-15 22:02:03 | 只看该作者
2011niumao 发表于 2022-10-15 13:47
第一,按照你的描述,菜单里面,应该是/dev/mapper/loop0p3
第二,root=UUID=${ddeeff}这个没错,但经 ...

谢谢大佬的耐心回复

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

请问下 root=UUID=, 和root=/dev/sdaX, root=/dev/LABEL/XXX 这里的root还是vhd所在硬盘分区吧。

谢谢,不想折腾mint vhd了,我觉得可能还是mint的init local 那几个文件和ubuntu不同有关,过段时间换ubunt vhd再试试。

点评

是,root总是指vhd文件所在分区。其中,sdaX指分区序号,主分区1,2,3,4,逻辑分区是 5 6 7 这样的。 LABEL指卷标,不能有汉字,只能是英文。  详情 回复 发表于 2022-10-16 10:12
回复

使用道具 举报

591#
 楼主| 发表于 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文件里的错误。
回复

使用道具 举报

592#
 楼主| 发表于 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/
复制代码

回复

使用道具 举报

593#
 楼主| 发表于 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
复制代码
回复

使用道具 举报

594#
 楼主| 发表于 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
复制代码
回复

使用道具 举报

595#
发表于 2022-10-16 16:52:15 | 只看该作者
2011niumao 发表于 2022-10-15 13:47
第一,按照你的描述,菜单里面,应该是/dev/mapper/loop0p3
第二,root=UUID=${ddeeff}这个没错,但经 ...

安装了ubuntu2204,一次搞定,就是开机稍微久点。

mint就是不行。
回复

使用道具 举报

596#
发表于 2022-10-16 21:26:50 | 只看该作者
2011niumao 发表于 2022-10-15 13:58
赞!!!  EFI模式引导,我有大量失败例子和成功例子。

主要原因是grub2的一些功能,比如查找文件,查找 ...

谢谢大神回复。回头再试试。现在在上夜班加班。
回复

使用道具 举报

597#
发表于 2022-10-31 11:34:41 | 只看该作者
brux 发表于 2022-10-16 16:52
安装了ubuntu2204,一次搞定,就是开机稍微久点。

mint就是不行。

对,我也发现22启动比18 慢
回复

使用道具 举报

598#
发表于 2022-10-31 11:35:18 | 只看该作者

总结一句话就是,空行可以有,但是空行不要有空格
回复

使用道具 举报

599#
发表于 2022-10-31 11:53:17 | 只看该作者
回复

使用道具 举报

600#
发表于 2022-11-6 15:10:19 | 只看该作者
感谢楼主提供 引导LINUX 的教程,长见识了
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-9 05:52

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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