无忧启动论坛

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

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

    [复制链接]
391#
 楼主| 发表于 2019-3-23 13:49:02 | 只看该作者
这个就不知道原因了。有可能vhd文件系统有错误,尝试在Virtualbox下做个磁盘检查,fsck
也许有效。
回复

使用道具 举报

392#
发表于 2019-4-1 11:26:47 | 只看该作者
大神,mydracut-new/ubuntu-kloop/readme-ubuntu-kloop里面第五段生成initrd.img文件说四个文件
把这里生成的文件 initrd.img-3.16.0-30-generic 与 /boot/下两个文件 vmlinuz-3.16.0-30-generic
和vhd文件UBUNTU-14041.vhd一共四个文件拷贝或移动到一个NTFS分区根目录下一个名叫ubuntu子目录中。
如果没有ubuntu目录就手动建立一个。


没想出来是哪四个,我就把生成的initrd.img和boot下的vmlinuzxxxxx和vhdx文件放到移动硬盘ubuntu目录下,我的移动硬盘是gpt格式的只有efi分区和一个主分区。

引导这样子

  1. if search --no-floppy -f  /ubuntu/vubt.vhdx; then
  2. menuentry "vubt_archbang.vhdx " --class ubuntu {
  3.         insmod gzio
  4.         insmod part_msdos
  5.         insmod part_gpt
  6.         insmod ext2
  7.         insmod ntfs
  8.         insmod probe
  9.         set vhdfile="/ubuntu/vubt.vhdx"
  10.         ##set root=(hd0,1)
  11.         search --no-floppy -f --set=aabbcc  $vhdfile
  12.         set root=${aabbcc}
  13.         probe -u --set=ddeeff ${aabbcc}
  14.         loopback lp0 $vhdfile
  15.         linux        /ubuntu/vmlinuz-4.13.0-36-generic root=UUID=${ddeeff}  kloop=$vhdfile  kroot=/dev/loop0p1
  16.         initrd        /ubuntu/initrd.img-4.13.0-36-generic
  17. }
  18. fi
复制代码


这可以成功引导论坛里一位兄弟的archLinux-vhd
最后输出一大段,有一句 no working init found

也测试了readme里面的引导,试了好几个值,都失败了。
最后把boot里的initrad.imgxxxx文件换成定制的,试这段引导
  1. menuentry " UBUNTU-1604.vhdx 5" --class  ubuntu {
  2.         insmod gzio
  3.         insmod part_msdos
  4.         insmod part_gpt
  5.         insmod ext2
  6.         insmod ntfs
  7.         insmod probe
  8.         set vhdfile="/ubuntu/vubt.vhdx"
  9.         set root=(hd0,1)
  10.         search --no-floppy -f --set=aabbcc  $vhdfile
  11.         set root=${aabbcc}
  12.         probe -u --set=ddeeff ${aabbcc}
  13.         loopback loop0 $vhdfile
  14.         linux        (loop0,1)/vmlinuz-4.13.0-36-generic root=/dev/sda5 rw  kloop=$vhdfile  kroot=/dev/mapper/loop0p1
  15.         initrd        (loop0,1)/initrd.img-4.13.0-36-generic
  16. }
复制代码


这就直接提示disk 'loop0, 1' not found
试了从0到5都不行,又改root=(hd0, 1),0试到3也不行((loop0,1)),同样提示not found

我用的ubuntu是16.04,还更换外部的initrd和vmlinuz文件,用了你的和那位兄弟的,也不行。
请大神指导一下,感谢。




回复

使用道具 举报

393#
发表于 2019-4-1 11:34:39 | 只看该作者
我制作的过程就是先安装好软件,再把init,local,mkinitramfs,modules文件替换,再编译安装ntfs_3g,再替换其文件,用的是ubuntu-kloop的源文件
回复

使用道具 举报

394#
发表于 2019-4-1 18:30:54 | 只看该作者
用efi装vhd也试了,我发现都提示init问题
回复

使用道具 举报

395#
发表于 2019-4-1 23:32:40 | 只看该作者
终于试成功了,首先就是不要有逻辑分区,安装的时候自动分区会有逻辑分区swap,所以要手动分区,在vbox里面初始分辨率太小,导致手动分区那块被隐藏了,不得不去网上找图片,用tab键摸黑分区。
然后就是去楼主发的vhd里,启动它,找到对应的文件,因为我发现它们不一样,制作的initram.imgxxx大小差很多。这样也可以试出启动菜单出来。
最后启动成功,我发现生成的两个文件和楼主发的可以直接启动新安装的ubuntu18,太厉害了。
如果你不想编译的话,可以直接用楼主的两个启动文件。
查看分区情况可以把vhd挂载后用diskgenius工具查看,磁盘只有一个分区就对了。
vbox里也不要什么efi启动,因为会安装后启动不了,也不需要。
最后发下我的菜单:
menuentry ' ubt16-my 1'  --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 /ubt/ubt16.vhd
        set root=${aabbcc}
        probe -u --set=ddeeff ${aabbcc}
        linux        /ubt/vmlinuz-4.13.0-36-generic root=UUID=${ddeeff} kloop=/ubt/ubt16.vhd kroot=/dev/mapper/loop0p1
        initrd        /ubt/initrd.img-4.13.0-36-generic
}

点评

ubuntu有不会的兄弟可以加我QQ:1147940842  详情 回复 发表于 2019-4-1 23:34
回复

使用道具 举报

396#
发表于 2019-4-1 23:34:52 | 只看该作者
gland2015 发表于 2019-4-1 23:32
终于试成功了,首先就是不要有逻辑分区,安装的时候自动分区会有逻辑分区swap,所以要手动分区,在vbox里面 ...

ubuntu有不会的兄弟可以加我QQ:1147940842
回复

使用道具 举报

397#
发表于 2019-5-24 15:50:48 | 只看该作者
Hongrongqi 发表于 2019-3-21 17:37
大师现在有更新的教程或文件吗?deepin 15.9安装完没有声音,

请问能提供下deepin15.9的安装教程么,按照楼主的,有个工具安装不了
回复

使用道具 举报

398#
发表于 2019-5-24 16:52:40 | 只看该作者
请问大大,deepin和debain,我应该选哪个kloop呀

点评

使用ubuntu的就可以了  详情 回复 发表于 2019-5-25 22:13
回复

使用道具 举报

399#
 楼主| 发表于 2019-5-25 22:13:36 | 只看该作者
763180872 发表于 2019-5-24 16:52
请问大大,deepin和debain,我应该选哪个kloop呀

使用ubuntu的就可以了

点评

不好意思,刚刚都没有给大神说声谢谢,光顾着问问题了  详情 回复 发表于 2019-5-27 10:24
kpartx-boot 这个工具安装不了,没啥关系么, 3-2 . 修改mkinitramfs文件 sudo cp /usr/sbin/mkinitramfs ~/mkinitramfs.backup sudo gedit /usr/sbin/mkinitramfs 找到# util-linux,原来其下只有一行copy_  详情 回复 发表于 2019-5-27 10:20
回复

使用道具 举报

400#
发表于 2019-5-27 10:20:05 | 只看该作者
2011niumao 发表于 2019-5-25 22:13
使用ubuntu的就可以了

kpartx-boot 这个工具安装不了,没啥关系么,

3-2 . 修改mkinitramfs文件
sudo cp /usr/sbin/mkinitramfs ~/mkinitramfs.backup
sudo gedit /usr/sbin/mkinitramfs

找到# util-linux,原来其下只有一行copy_exec /sbin/blkid /sbin.
依照附件中的mkinitramfs的 # util-linux 段落修改 ,在其下加入几行即可.

这一步也有点不同,没有# util-linux相关部分

点评

只要有 kpartx 命令就可以了.你可以直接安装kpartx.不一定是kpartx-boot. 第二个,好像后来没有那一段了,你找一个合适的地方插入进去即可,  详情 回复 发表于 2019-5-28 12:22
回复

使用道具 举报

401#
发表于 2019-5-27 10:24:54 | 只看该作者
2011niumao 发表于 2019-5-25 22:13
使用ubuntu的就可以了

不好意思,刚刚都没有给大神说声谢谢,光顾着问问题了
回复

使用道具 举报

402#
 楼主| 发表于 2019-5-28 12:22:10 | 只看该作者
本帖最后由 2011niumao 于 2019-5-28 12:24 编辑
763180872 发表于 2019-5-27 10:20
kpartx-boot 这个工具安装不了,没啥关系么,

3-2 . 修改mkinitramfs文件

只要有 kpartx 命令就可以了.你可以直接安装kpartx.不一定是kpartx-boot.
第二个,好像后来没有那一段了,你找一个合适的地方插入进去即可,参考一下附件.

mkinitramfs.zip

3.72 KB, 下载次数: 11, 下载积分: 无忧币 -2

点评

好的,非常感谢,晚点试试  详情 回复 发表于 2019-5-28 14:10
回复

使用道具 举报

403#
发表于 2019-5-28 14:10:40 | 只看该作者
2011niumao 发表于 2019-5-28 12:22
只要有 kpartx 命令就可以了.你可以直接安装kpartx.不一定是kpartx-boot.
第二个,好像后来没有那一段了, ...

好的,非常感谢,晚点试试
回复

使用道具 举报

404#
发表于 2019-6-5 15:24:51 | 只看该作者
楼主,为啥没有centos的修改步骤?是不支持吗

点评

支持的.只不过与其他版本差不多.就不单独列出了, 有兴趣可以模仿Fedora 做做看.都是一个命令搞定了.  详情 回复 发表于 2019-6-7 21:07
回复

使用道具 举报

405#
 楼主| 发表于 2019-6-7 21:07:53 | 只看该作者
指南针 发表于 2019-6-5 15:24
楼主,为啥没有centos的修改步骤?是不支持吗

支持的.只不过与其他版本差不多.就不单独列出了,
有兴趣可以模仿Fedora 做做看.都是一个命令搞定了.
回复

使用道具 举报

406#
发表于 2019-6-20 11:57:36 | 只看该作者
grub4引导如何在菜单上加WIN7-8-10 XP的vhd菜单?
回复

使用道具 举报

407#
发表于 2019-11-10 14:54:54 | 只看该作者
感谢大神
回复

使用道具 举报

408#
发表于 2019-12-4 16:54:15 | 只看该作者
希望大神写个制作引导文件的自动处理脚本,不然好多人不会弄,谢谢.
回复

使用道具 举报

409#
发表于 2019-12-8 18:02:50 | 只看该作者
deep上卡在mkinitramfs这一步有问题,再研究研究

点评

deepin15.5做成过,现在deepin15.11弄了好几天搞不定,那几个文件里的代码和教程里的不一样  详情 回复 发表于 2019-12-9 16:24
回复

使用道具 举报

410#
发表于 2019-12-9 16:24:42 | 只看该作者
Kernelam2 发表于 2019-12-8 18:02
deep上卡在mkinitramfs这一步有问题,再研究研究

deepin15.5做成过,现在deepin15.11弄了好几天搞不定,那几个文件里的代码和教程里的不一样
回复

使用道具 举报

411#
发表于 2020-1-18 17:58:30 | 只看该作者
从 固定VHD与只读squashfs引导LINUX, UBUNTU ARCH Fedora Opensuse Mageia五种
回复

使用道具 举报

412#
发表于 2020-2-7 10:08:26 | 只看该作者
我就说一件事,你们自己制作好之后记得一定用真机启动进行测试
不要像某个傻X一样用虚拟机启动了100多次还没反应过来
回复

使用道具 举报

413#
发表于 2020-6-1 15:33:17 | 只看该作者
谢谢分享
回复

使用道具 举报

414#
发表于 2020-6-11 23:13:21 | 只看该作者
本帖最后由 2011hjcjie 于 2020-6-11 23:16 编辑

楼主辛苦,今看到楼主更新内容我跟进尝鲜。
现请教用只读squashfs系统制作固定vhd的可写系统时引导设置时的问题。
menuentry "UBT-small.vhd " --class ubuntu {
insmod gzio
insmod part_msdos
insmod part_gpt
insmod ext2
insmod ntfs
insmod probe
set vhdfile="/ubuntu/UBT-small.vhd"
set root=(hd0,1)
search --no-floppy -f --set=aabbcc  $vhdfile
set root=${aabbcc}
probe -u --set=ddeeff ${aabbcc}
loopback lp0 $vhdfile
linux (lp0,1)/vmlinuz root=UUID=${ddeeff}  kloop=$vhdfile  kroot=/dev/mapper/loop0p1
initrd (lp0,1)/initrd.img
}

上面代码中(lp0,1)的1代表的时什么? gpt格式的话是GPT2吗?
回复

使用道具 举报

415#
 楼主| 发表于 2020-6-12 12:23:56 | 只看该作者
本帖最后由 2011niumao 于 2020-6-12 12:45 编辑
2011hjcjie 发表于 2020-6-11 23:13
楼主辛苦,今看到楼主更新内容我跟进尝鲜。
现请教用只读squashfs系统制作固定vhd的可写系统时引导设置时 ...

lp0,1表示第一个loop盘的第一个分区. gpt按照实际分区顺序写为(lp0,x)应该可以
根据我的测试,现在推荐把vmlinuz initrd.img拷贝到vhd文件外面,使用其引导.

这样做,第一兼顾grub4dos;
第二,兼顾安全启动, 这时候把grub2-efi放在fat32优盘上,把vmlinuz initrd.img也放在优盘上,
可以安全启动.  (能安全启动的grub2可以自己从ubuntu2004发行光盘里获得)

点评

固定VHD还是没有启动成功 引导代码如下 menuentry "ubt.vhd" --class ubuntu { insmod gzio insmod part_msdos insmod part_gpt insmod ext2 insmod ntfs insmod probe set vhdfile="/ubun  详情 回复 发表于 2020-6-12 18:26
回复

使用道具 举报

416#
 楼主| 发表于 2020-6-12 12:25:46 | 只看该作者
2011hjcjie 发表于 2020-6-11 23:13
楼主辛苦,今看到楼主更新内容我跟进尝鲜。
现请教用只读squashfs系统制作固定vhd的可写系统时引导设置时 ...
  1. loopback lp0 $vhdfile
  2. linux (lp0,1)/vmlinuz
复制代码
lp0来自于第一个命令loopback,你可以把lp0改为其他名字,前后一致就可以.
回复

使用道具 举报

417#
发表于 2020-6-12 18:26:30 | 只看该作者
本帖最后由 2011hjcjie 于 2020-6-12 18:33 编辑
2011niumao 发表于 2020-6-12 12:23
lp0,1表示第一个loop盘的第一个分区. gpt按照实际分区顺序写为(lp0,x)应该可以
根据我的测试,现在推荐把 ...

固定VHD还是没有启动成功
引导代码如下,请赐教!
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
}

微信图片_20200612102259.jpg (165.62 KB, 下载次数: 193)

微信图片_20200612102259.jpg

批注 2020-06-12 103257.png (277.09 KB, 下载次数: 188)

批注 2020-06-12 103257.png
回复

使用道具 举报

418#
 楼主| 发表于 2020-6-12 19:18:43 | 只看该作者
本帖最后由 2011niumao 于 2020-6-12 19:31 编辑
2011hjcjie 发表于 2020-6-12 18:26
固定VHD还是没有启动成功
引导代码如下,请赐教!
menuentry "ubt.vhd" --class ubuntu {

首先,grub2没有问题,唯一的问题可能是linux命令中的root ,kroot, kloop参数是否正确了

kroot参数是不是应该改为 /dev/mapper/loop0p2 ? 还是 /dev/mapper/loop0p3?
可以在squashfs 文件系统里面,使用 kpartx -av VHD文件名 看出来根分区应该是第几个的.

如果windows下分区gpt磁盘可能有ms隐藏分区的,因此可能是 /dev/mapper/loop0p2 或者/dev/mapper/loop0p3

点评

kroot 参数应该每问题吧  详情 回复 发表于 2020-6-12 20:14
回复

使用道具 举报

419#
 楼主| 发表于 2020-6-12 19:27:21 | 只看该作者
本帖最后由 2011niumao 于 2020-6-12 19:36 编辑
2011hjcjie 发表于 2020-6-12 18:26
固定VHD还是没有启动成功
引导代码如下,请赐教!
menuentry "ubt.vhd" --class ubuntu {

root参数也有可能不对. 有些场合下自动查询uuid,并传递给linux内核的做法会失效
(比如安全启动的场合. 查询uuid的模块不能加载)
此时只能直接给出明确的root参数值.比如好处理的,可以使用LABEL.
  1. root=LABEL=Windows
复制代码

把那个Windows更改为你的硬盘上vhd文件所在分区的标签即可.
(这里分区标签不能中文或者有空格)

如果root kloop kroot 参数正确,还有一种可能就是恢复到固定vhd时候出错
(比如没有把固定vhd中分区格式化为ext4),那就需要重新进入squashfs系统,重新格式化和运行rsync 再制作一遍了.

回复

使用道具 举报

420#
 楼主| 发表于 2020-6-12 19:45:54 | 只看该作者
本帖最后由 2011niumao 于 2020-6-12 19:58 编辑
2011hjcjie 发表于 2020-6-12 18:26
固定VHD还是没有启动成功
引导代码如下,请赐教!
menuentry "ubt.vhd" --class ubuntu {
还有一种情形,需要注意
就是先进入squashfs系统,在这个系统下修改vhd系统中的/etc/fstab文件,把它的根分区 / 那一行修改正确.
在制作squashfs文件系统时候,会注释掉 / 这一行,如下
  1. # /etc/fstab: static file system information.
  2. #
  3. # Use 'blkid -o value -s UUID' to print the universally unique identifier
  4. # for a device; this may be used with UUID= as a more robust way to name
  5. # devices that works even if disks are added and removed. See fstab(5).
  6. #
  7. # <file system> <mount point>   <type>  <options>       <dump>  <pass>
  8. proc            /proc           proc    nodev,noexec,nosuid 0       0
  9. ###/dev/sda10
  10. ###UUID=29b92931-2ac3-4720-a5ed-40b9a3cc1241      /      ext4      errors=remount-ro      0      1
复制代码
这里的UUID前面的三个###是注释掉这一行的意思. 进入squashfs系统后,挂载vhd文件,将这三个###号去掉,运行blkid查询出正确的uuid,替换掉那一串字母数字组合,保存,
  1. # /etc/fstab: static file system information.
  2. #
  3. # Use 'blkid -o value -s UUID' to print the universally unique identifier
  4. # for a device; this may be used with UUID= as a more robust way to name
  5. # devices that works even if disks are added and removed. See fstab(5).
  6. #
  7. # <file system> <mount point> <type> <options> <dump> <pass>
  8. proc /proc proc nodev,noexec,nosuid 0 0
  9. ###/dev/sda10
  10. UUID=812c1d35-3253-4a11-88db-e2e0834bf717 / ext4 errors=remount-ro 0 1
复制代码
(这里UUID后面是随便写的,需要更换为vhd中linux系统的根分区的uuid).重启后就可以进入了.

在squashfs 文件系统中需执行以下命令
  1. sudo kpartx -av VHD文件名(带路径)
  2. sudo mount /dev/mapper/loop8px /mnt
  3. sudo blkid
  4. sudo gedit /mnt/etc/fstab
  5. sudo umount /mnt
  6. sudo kpartx -d /dev/loop8
  7. sudo losetup -d /dev/loop8
  8. sudo reboot
复制代码

点评

loop8px 这个参数是什么意思?  详情 回复 发表于 2020-6-12 20:39
最后这种可能性最大. 我也遇到了几次图片中显示的引导失败情形, 改了/etc/fstab 就成功引导了. 猜想其机制是: 由于/etc/fstab里的根分区挂载信息被注释掉 (不注释时候启动squashfs文件系统会出错) 所以系统检测  详情 回复 发表于 2020-6-12 19:51
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 02:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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