无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: 2011niumao
打印 上一主题 下一主题

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

    [复制链接]
451#
 楼主| 发表于 2020-8-22 16:12:47 来自手机 | 只看该作者
kroot是虚拟硬盘里根分区在linux下名字。虚拟硬盘一个分区时候就是loop0p1。etc/fstab这个文件可以删除。或者注释掉所有内容。
回复

使用道具 举报

452#
发表于 2020-8-23 09:27:52 | 只看该作者
还有就是都要放在fat32分区吗?ntfs分区行不行
回复

使用道具 举报

453#
 楼主| 发表于 2020-8-23 09:37:26 来自手机 | 只看该作者
ntfs分区可以。fat32分区里单一文件不能超过4g的
回复

使用道具 举报

454#
发表于 2020-9-1 23:18:18 | 只看该作者
原来用下面引导成功进入桌面,不知是什么原因今天不能进入桌面;
menuentry "ubt.vhd" --class ubuntu {
        insmod gzio
        insmod part_msdos
        insmod part_gpt
        insmod ext2
        insmod ntfs
        insmod probe
        set vhdfile="/ubuntu/ubt.vhd"
        set root=(hd1,gpt2)
        search --no-floppy -f --set=aabbcc  $vhdfile
        set root=${aabbcc}
        probe -u --set=ddeeff ${aabbcc}
        loopback lp0 $vhdfile
        linux        (lp0,1)/boot/vmlinuz root=UUID=${ddeeff}  kloop=$vhdfile  kroot=/dev/mapper/loop0p1
        initrd        (lp0,1)/boot/initrd.img
}

改为如下引导,正常进入桌面
menuentry "ubt.vhd"  --class ubuntu  {
    recordfail
    insmod gzio
    insmod part_msdos
    insmod part_gpt
    insmod ext2
    insmod ntfs
    insmod probe
    insmod search
    search --no-floppy -f --set=aabbcc /ubuntu/ubt.vhd
    set root=${aabbcc}
    probe -u --set=ddeeff ${aabbcc}
    linux   /ubuntu/vmlinuz root=UUID=${ddeeff} kloop=/ubuntu/ubt.vhd kroot=/dev/mapper/loop0p1
    initrd  /ubuntu/initrd.img
}

1. 不知是什么原因,希望得到大神指导
2. 我用的是vbt.vhd 2004,  貌似没有配置无线网络。
   怎么配置,望赐教!
回复

使用道具 举报

455#
 楼主| 发表于 2020-9-2 19:08:10 | 只看该作者
1, 两者的区别在于,第一种使用的引导文件initrd.img在vhd文件内,第二种使用的引导文件在vhd文件外部。如果升级以后,使用了原版的init local  mkinitcpio等替换了修订过得能引导vhd的版本,则出现这个毛病。只能重新把vhd内部的init local  等文件再重新修改一遍,重新生成对应最新版本的initrd.img就可以
2,可能需要手动源码编译安装无线驱动,或者尝试在有线网络下在软件更新那里搜索选择安装专有驱动。
回复

使用道具 举报

456#
发表于 2020-10-2 22:46:45 | 只看该作者
现在Deepin20正式版发布了,在虚拟机使用体验还不错,打算做个VHD,发现几个需要修改的文件内容与教程不太相同,希望有制作成功的介绍下经验,非常感谢!
回复

使用道具 举报

457#
发表于 2020-10-28 11:26:59 | 只看该作者
本帖最后由 songjl1995 于 2020-10-28 11:29 编辑

大神,我UBUNTU2004用您的initrd.img-5.4.0-26-generic可以启动
自己按照教程做了一个initrd.img-5.4.0-52-generic
提示ALERT! UUID=xxxxxxxxx does not exist. Dropping to a shell!

两个启动菜单是相近的,只是改了initrd.img和vmlinuz的文件名

生成的initrd.img-5.4.0-52-generic时候,ntfs_3g报了一些not found的错误,但是文件还是生成了,正常情况下不会报这个对吗?

点评

ntfs-3g的编译应该不是问题. 建议按照说明重新制作initrd.img看看. 或者在grub2菜单界面按e键 来编辑启动参数.root=/dev/sdaX 或者root=LABEL=XXXXX 尝试一下看能不能启动. 这里XXXXX换成硬盘分区标签, sdaX中X  详情 回复 发表于 2020-10-31 10:39
回复

使用道具 举报

458#
 楼主| 发表于 2020-10-31 10:39:52 | 只看该作者
songjl1995 发表于 2020-10-28 11:26
大神,我UBUNTU2004用您的initrd.img-5.4.0-26-generic可以启动
自己按照教程做了一个initrd.img-5.4.0-52 ...

ntfs-3g的编译应该不是问题. 建议按照说明重新制作initrd.img看看.  或者在grub2菜单界面按e键
来编辑启动参数.root=/dev/sdaX 或者root=LABEL=XXXXX  尝试一下看能不能启动.
这里XXXXX换成硬盘分区标签, sdaX中X是分区序号.
回复

使用道具 举报

459#
发表于 2020-11-1 17:37:38 | 只看该作者
看得一头雾水,就想把统信UOS专业版装进VHDX使用,看来步履艰难呀。
回复

使用道具 举报

460#
发表于 2020-11-6 18:46:45 | 只看该作者
收藏记录
回复

使用道具 举报

461#
发表于 2020-11-14 11:07:03 | 只看该作者
2011niumao 发表于 2020-6-15 14:26
感觉还是参数配置不正确导致的。  gpt磁盘,kroot参数有可能是/dev/mapper/loop0p2 或者 /dev/mapper/loo ...

谢谢大佬,最终发现是修改文件的时候,个别行额外换行。vi查看ntfs-3g出现了异常字符,修改后功能正常了
回复

使用道具 举报

462#
发表于 2020-11-25 22:37:05 | 只看该作者
66666666666666666666666666
回复

使用道具 举报

463#
发表于 2020-12-19 14:38:57 | 只看该作者
感谢分享
回复

使用道具 举报

464#
发表于 2021-2-4 21:22:15 | 只看该作者
楼主麻烦帮我,看下这个是什么问题?

回复

使用道具 举报

465#
 楼主| 发表于 2021-2-5 21:58:12 | 只看该作者
根系统没有挂载成功.  一般是没有找到vhd文件, 或者是升级后vhd文件里面的initrd.img-XXXX 文件的相应代码被重置为原始状态了.  需要按照教程重新修改对应的脚本重新制作initrd.img文件.
为保险起见.建议把引导使用的vmlinuz initrd.img拷贝到vhd文件外面.
回复

使用道具 举报

466#
发表于 2021-2-5 22:31:57 | 只看该作者
2011niumao 发表于 2021-2-5 21:58
根系统没有挂载成功.  一般是没有找到vhd文件, 或者是升级后vhd文件里面的initrd.img-XXXX 文件的相应代码 ...

很高兴你还活跃在论坛,之前看帖子最早都14年左右发的,都怕你不在论坛了。感谢楼主,这么及时的回复,因为我还是列兵,回帖要审核,所以不能及时回复,抱歉。

环境:VM虚拟机里装好了ubuntu18.04 版本5.4.0-42
          制作initrd.img文件前用过sudo apt-get update
         按照教程,用文件直接替换ubuntu 里对应的文件,然后编译,从VM里的ubuntu拷出文件放到和ubuntu18.vhd同一个目录。改名为,vmlinuz、initrd.img

上面那个出错是这样。我用你链接里提供的grubsmall2017.zip文件里的“GRub4dos启动需要三个文件 grldr grldr.mbr menu.lst与一个目录grub” 这个几个放到物理机win7的C盘根目录,然后刚开始识别不出来VHD仔细看是iftitle那行的“]“ 和后面的文字没有空格,所以导致识别失败,改了就能引导但是到上面的界面就不动了。

我用 ls /root看到了我的D盘目录,但是我就迷茫了,这是引导initrd.img成功了识别到目录(就是LINUX识别),还是怎么回事。initrd.img是按照教程里做的。
还有一个问题,教程里修改local文件"mountroot()函数内pre_mountroot" 有这个函数但没有pre_mountroot这个。是版本的原因么?


如果重新制作,我打算把你UBT-small\ghostplant-UBT-small目录里的UBT-small.vhd用DiskGeniusLoad提取出要修改的文件直接替换试试。

点评

估计是local init 修改的不对。 重新修改看看。第一需要自己编译ntfs-3g。第二,修改local init 第三,修改mkinitramf /etc/initramfs-tools/modules 第三, /usr/share/initramfs-tools/scripts/.../ntfs-3g这  详情 回复 发表于 2021-2-7 10:30
回复

使用道具 举报

467#
 楼主| 发表于 2021-2-7 10:30:27 | 只看该作者
本帖最后由 2011niumao 于 2021-2-7 10:34 编辑
piazini 发表于 2021-2-5 22:31
很高兴你还活跃在论坛,之前看帖子最早都14年左右发的,都怕你不在论坛了。感谢楼主,这么及时的回复,因 ...

估计是local init 修改的不对。 重新修改看看。可以使用百度云共享里的initrad.img与vmlinuz引导跑起来,进入vhd后再重新制作
自己版本的initrd.img ,制作好后拷贝到外部。

第一需要自己编译ntfs-3g。
第二,修改local init
第三,修改mkinitramf  /etc/initramfs-tools/modules  
第四, /usr/share/initramfs-tools/scripts/.../ntfs-3g这个文件不用修改了(有时候修改反而不好)。
回复

使用道具 举报

468#
发表于 2021-2-7 11:53:54 | 只看该作者
感谢楼主,
问题一,教程说修改local文件"mountroot()函数内pre_mountroot" 但没有pre_mountroot这个。
问题二,我用的是VM Pro 12.5.0 build-4352439装ubuntu 18.04 (下载地址mirrors.163.com/ubuntu-releases/18.04.5/ubuntu-18.04.5-desktop-amd64.iso) 执行了sudo apt-get install kpartx kpartx-boot util-linux dmsetup lvm2 虚拟机重启就要反复重启或关闭虚拟机,才能启动到桌面,想问下你有这样的情况么?
回复

使用道具 举报

469#
发表于 2021-2-8 10:50:34 | 只看该作者
感谢楼主指导。
经过反复查看教程,发现原来是init文件里有多处修改。

我看的UBT-small\mydracut\ubuntu-kloop\KLOOP教程-UBUNTU篇.txt的一个教程只有一处修改。

之后又看UBT-small\readme-ubuntukloop.zip里的PDF教程修改,修改完重新编译initrd.img-5.4.0-42-generic,然后Ubuntu18.04一次性成功。
回复

使用道具 举报

470#
 楼主| 发表于 2021-2-8 11:21:47 | 只看该作者
问题二, 没有遇到过.  没用过vm, 我用的是VirtualBox.
问题一, 应该是这个语句local_mount_root()里的语句local_premount
  所有修改在其后. 用条件语句把其后所有语句括起来,在加入kloop相关语句.
  1. local_mount_root()
  2. {
  3.         local_top
  4.         local_device_setup "${ROOT}" "root file system"
  5.         ROOT="${DEV}"

  6.         # Get the root filesystem type if not set
  7.         if [ -z "${ROOTFSTYPE}" ]; then
  8.                 FSTYPE=$(get_fstype "${ROOT}")
  9.         else
  10.                 FSTYPE=${ROOTFSTYPE}
  11.         fi

  12.         [color=Magenta]local_premount
  13. [/color]
  14.         if [ "${readonly}" = "y" ] && \
  15.            [ -z "$LOOP" ]; then
  16.                 roflag=-r
  17.         else
  18.                 roflag=-w
  19.         fi

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

  22.         checkfs ${ROOT} root "${FSTYPE}"

  23.         # FIXME This has no error checking
  24.         # Mount root
  25.         mount ${roflag} ${FSTYPE:+-t ${FSTYPE} }${ROOTFLAGS} ${ROOT} ${rootmnt}
  26.         mountroot_status="$?"
  27.         if [ "$LOOP" ]; then
  28.                 if [ "$mountroot_status" != 0 ]; then
  29.                         if [ ${FSTYPE} = ntfs ] || [ ${FSTYPE} = vfat ]; then
  30.                                 panic "
  31. Could not mount the partition ${ROOT}.
  32. This could also happen if the file system is not clean because of an operating
  33. system crash, an interrupted boot process, an improper shutdown, or unplugging
  34. of a removable device without first unmounting or ejecting it.  To fix this,
  35. simply reboot into Windows, let it fully start, log in, run 'chkdsk /r', then
  36. gracefully shut down and reboot back into Windows. After this you should be
  37. able to reboot again and resume the installation.
  38. (filesystem = ${FSTYPE}, error code = $mountroot_status)
  39. "
  40.                         fi
  41.                 fi

  42.                 mkdir -p /host
  43.                 mount -o move ${rootmnt} /host

  44.                 while [ ! -e "/host/${LOOP#/}" ]; do
  45.                         panic "ALERT!  /host/${LOOP#/} does not exist.  Dropping to a shell!"
  46.                 done

  47.                 # Get the loop filesystem type if not set
  48.                 if [ -z "${LOOPFSTYPE}" ]; then
  49.                         eval $(fstype < "/host/${LOOP#/}")
  50.                 else
  51.                         FSTYPE="${LOOPFSTYPE}"
  52.                 fi
  53.                 if [ "$FSTYPE" = "unknown" ] && [ -x /sbin/blkid ]; then
  54.                         FSTYPE=$(/sbin/blkid -s TYPE -o value "/host/${LOOP#/}")
  55.                         [ -z "$FSTYPE" ] && FSTYPE="unknown"
  56.                 fi

  57.                 if [ ${readonly} = y ]; then
  58.                         roflag=-r
  59.                 else
  60.                         roflag=-w
  61.                 fi

  62.                 # FIXME This has no error checking
  63.                 modprobe loop
  64.                 modprobe ${FSTYPE}

  65.                 # FIXME This has no error checking
  66.                 mount ${roflag} -o loop -t ${FSTYPE} ${LOOPFLAGS} "/host/${LOOP#/}" ${rootmnt}

  67.                 if [ -d ${rootmnt}/host ]; then
  68.                         mount -o move /host ${rootmnt}/host
  69.                 fi
  70.         fi
  71. }
复制代码


回复

使用道具 举报

471#
发表于 2021-2-8 12:31:06 | 只看该作者
楼主,根据你的教程,我整理了个完整版本的,让新人少走弯路。
h\ttp://cnblogs.com/wutou/p/14366476.html

点评

谢谢  发表于 2021-2-9 22:09
回复

使用道具 举报

472#
发表于 2021-2-8 12:35:23 | 只看该作者
感谢楼主,我已经用readme-ubuntukloop.zip包里的教程去改过好了。可能那个是旧版本的吧。
回复

使用道具 举报

473#
发表于 2021-2-10 22:08:45 | 只看该作者
LZ ,请教个问题。我电脑是mbr方式引导的WIN7,引导文件名ghldr.mbr。我用BOOTICEx64添加了一个grldr.mbr的GRUB4DOS,结果重启后,先看到grldr.mbr的界面,而后才看到原来WIN7的启动列表。我的理解是应该先看到WIN7列表,然后下面GRUB4DOS是grldr.mbr的列表么。这是怎么回事?
回复

使用道具 举报

474#
发表于 2021-2-10 22:15:07 | 只看该作者
LZ,我从http://52pojie.cn/thread-1364700-1-1.html看到这样演一个引导界面,但是是MAC的,想问下GRUB4DOS能做成这样的么?我看前面的回答有人做了一个好像是grub2的,怎么才能做GRUB4DOS的界面。

回复

使用道具 举报

475#
 楼主| 发表于 2021-2-15 23:21:33 来自手机 | 只看该作者
第一个问题,用booice改动mbr后出来第一个界面自然是grldr.mbr。你可以用bootice修改mbr为nt6吧,恢复为先引导win7,再使用bootice修改bcd文件,加入引导项,引导项里选择grldr.mbr的,这个是你期望的结果。
回复

使用道具 举报

476#
 楼主| 发表于 2021-2-15 23:22:23 来自手机 | 只看该作者
第二个问题,好像只有grub2有这样的效果。grub4dos不行。
回复

使用道具 举报

477#
发表于 2021-2-18 10:21:41 | 只看该作者
楼主新年快乐。我成功从VHD引导到ubuntu18.04系统里,但是扩容又遇到问题。
vhd文件从8G扩容到16G,在vhd文件里的ubuntu18.04也用fdisk重新更新了分区表,也能显示16G,但是使用df -h 时也还现实8G。正常情况使用partprobe或kpartx在不重启就能让内核刷新容量,或者直接重启可以识别,但是,两种方法都不起效。我又尝试umount后刷新也不让说正在使用,之后又想用但用户模式启动,那个选择界面也没有(重启按shift)也不出那个选择和按e的节目。现在想,难道是要重新编译内核?放到和vhd同目录才行?有没有不编译内核的方法?
回复

使用道具 举报

478#
 楼主| 发表于 2021-2-18 19:08:55 | 只看该作者
没有扩容过. 真需要扩容时候, 我是先制作一个大的固定vhd, 把旧的系统做成squashfs系统, 再恢复到大的新vhd上.  这个过程唯一问题就是需要改写以下/etc/fstab, 把里面的旧根分区的UUID更改为新的UUID.

直接扩容我怀疑也需要同样的操作,修改UUID. 其他应该不动,  应该不需要重新制作initrd.img.
回复

使用道具 举报

479#
发表于 2021-2-19 13:17:14 | 只看该作者
LZ,我发现loop0p1对应的/sys/devices/virtual/block/dm-0/size文件里写的数字刚好和我没扩容磁盘扇区数字相对应,但是不知道这个文件是那个程序管理的。我在翻找linux设备管理相关的doc看看有没有线索。
回复

使用道具 举报

480#
发表于 2021-2-19 13:29:26 | 只看该作者
我想进入单用户模式,但是怎么修改grub的相关文件就是不生效。修改完要用update-grub命令,难道和vhd同目录的文件也要替换?

点评

第一个,是linux本身命令,不懂. 还是建议不直接扩容而是使用mksquashfs命令备份后恢复这种方式. 第二个, 直接启动到vhd系统的grub菜单现在应该是在vhd外面的,与vhd系统无关(vhd系统的grub2菜单仅仅在虚拟机启动时候  详情 回复 发表于 2021-2-20 10:40
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-24 06:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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