无忧启动论坛

标题: 用mkfs.ext4创建的img文件如何访问? [打印本页]

作者: 不知    时间: 2017-1-6 21:33
标题: 用mkfs.ext4创建的img文件如何访问?
用dd命令创建了一个空文件,然后用mkfs.ext4格式化了这个文件,挂载这个文件,复制了一些文件进去,在Linux下可以正常挂载访问,但到了G4D环境,无论是map成软盘还是硬盘,均卡死没有反应。但ubuntu系统中可以正常访问。G4D版本:grub4dos-0.4.6a-2016-06-03.
制作这个文件的目的是想把ubuntu安装到一个文件当中(使用ubuntu支持的loop内核参数)。修改fstab的根文件系统为/dev/loop0。结果用root=文件所在分区 loop=文件路径可以成功引导,但没进入图形界面,在字符界面可正常登陆。
作者: 不点    时间: 2017-1-7 00:04
反复看了半天,总算隐隐约约猜出你的意思了。以下就按我所猜测到的意思去理解和回复。

你说的大概就是“Linux 无法识别 grub4dos 虚拟出来的盘”吧?很遗憾,你现在才知道这一点。

grub4dos 的虚拟盘,仅仅在 bios(CPU 实模式)阶段起作用,在保护模式下不起作用。

当 Linux 刚开始启动时,仍处于 BIOS 阶段,此时,grub4dos 的虚拟盘仍然有效。但当 Linux 进入保护模式以后,已经完全脱离 BIOS 了,也就不会再识别出 grub4dos 所建立的虚拟盘了。

你知道 firadisk 和 WinvBlock 吗?这两位作者的工作,就是让 grub4dos 的虚拟盘能够被保护模式下的 Windows 识别出来的。如果没有这两个驱动程序,Windows 照样不能识别 grub4dos 的虚拟盘。

我讲清楚了吗?希望如此。


作者: 不知    时间: 2017-1-7 00:24
不点 发表于 2017-1-7 00:04
反复看了半天,总算隐隐约约猜出你的意思了。以下就按我所猜测到的意思去理解和回复。

你说的大概就是“ ...

万分感谢,可能是我表达不清。我的意思是G4D无法访问mkfs.ext4做的镜像文件。该文件在linux下可以正常挂载,我把镜像文件里的vmlinuz和initrd.img提取出来并启动,可以看见linux已经把镜像文件作为根文件系统挂载了。linux有强大的启动文件处理功能,可以不用G4D虚拟设备。但是这样除了引导文件就有三个文件了,系统一更新内核就要重新提取vmlinuz和initrd.img了。我想除了引导文件只保留一个文件,但是G4D无法读取镜像文件里的vmlinuz和initrd.img。另外,我用的是vmware测试的。
作者: 不点    时间: 2017-1-7 02:08
ext4 文件系统格式,grub4dos 是支持的。可能是你自己把什么东西弄错了(比如,命令敲错、设备号写错,等等),导致你无法在 grub4dos 环境下访问 ext4 分区里的文件。


作者: 不知    时间: 2017-1-7 08:26
不点 发表于 2017-1-7 02:08
ext4 文件系统格式,grub4dos 是支持的。可能是你自己把什么东西弄错了(比如,命令敲错、设备号写错,等等 ...

谢谢,这个镜像文件暂时是放在ext4分区的,主要问题是一执行map命令就卡死,没有任何提示。
作者: 不点    时间: 2017-1-7 10:47
不知 发表于 2017-1-7 08:26
谢谢,这个镜像文件暂时是放在ext4分区的,主要问题是一执行map命令就卡死,没有任何提示。

你先做个试验,把这个文件放在普通的 FAT32 或 NTFS 分区,再用 map ,看看是否可以成功。试验的目的是判断出,grub4dos 在访问 ext4 下的文件时,究竟是否有 bug。

你可以试试 0.4.5c 和 0.4.6a 两个版本系列,确定是否都有 bug。


作者: 不知    时间: 2017-1-7 10:56
不点 发表于 2017-1-7 10:47
你先做个试验,把这个文件放在普通的 FAT32 或 NTFS 分区,再用 map ,看看是否可以成功。试验的目的是判 ...

谢谢,我试试。
作者: 不知    时间: 2017-1-7 12:49
不点 发表于 2017-1-7 10:47
你先做个试验,把这个文件放在普通的 FAT32 或 NTFS 分区,再用 map ,看看是否可以成功。试验的目的是判 ...

没能重现开始遇到的情况。没有卡死,还是没有读取到镜像文件里的内容。



作者: 不点    时间: 2017-1-7 13:19
好的,我这么理解:你无法确定问题的范围。这样吧,等你弄清楚了问题的大致范围之后,再作研究。现在先搁置这个问题吧。
作者: 不知    时间: 2017-1-7 14:05
不点 发表于 2017-1-7 13:19
好的,我这么理解:你无法确定问题的范围。这样吧,等你弄清楚了问题的大致范围之后,再作研究。现在先搁置 ...

谢谢,大概吧,我确实不知道问题出在哪儿。
作者: 2011niumao    时间: 2017-1-17 20:49
楼主这里的问题是使用了loop模式,就是传统的UBUNTU的WUBI安装方式了。这里主要问题是img文件太大,没有连续存放。
需要使用碎片整理软件dfsetup 或者 WContig 作一次碎片整理 ,可能可以解决问题。

另一种方法也可以把引导文件,/boot/vmlinuz-XXXX,/boot/initrd.img-XXXXX 拿出来,使用grub4dos来引导,不需要整理碎片。
作者: 2011niumao    时间: 2017-1-17 21:23
建议 fstab文件中 根文件系统使用UUID方式,而不是/dev/loop0。
建议到以下链接下载 vmlinuz initrd.img两个文件,放在img文件外面,使用他们引导,同时把
引导参数 loop=XXX 改为kloop=XXX  引导试试。

https://pan.baidu.com/s/1c19AJQC#list/

这个是kloop模式引导。最初设计kloop就让它兼容了WUBI模式了。只是把loop参数改名为kloop了。
(可以加入引导参数  kroot=/dev/loop0 ,也可以不加。)

作者: 不知    时间: 2017-1-17 21:30
2011niumao 发表于 2017-1-17 21:23
建议 fstab文件中 根文件系统使用UUID方式,而不是/dev/loop0。
建议到以下链接下载 vmlinuz initrd.img两 ...

谢谢
作者: 2011niumao    时间: 2017-1-17 22:30
本帖最后由 2011niumao 于 2017-1-18 10:34 编辑
不知 发表于 2017-1-7 00:24
万分感谢,可能是我表达不清。我的意思是G4D无法访问mkfs.ext4做的镜像文件。该文件在linux下可以正常挂 ...


grub2有一个命令 loopback 可以满足只用一个文件的要求。一个菜单样式
  1. menuentry " UBT-small.vhd " --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="/ubt/UBT-small.vhd"
  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 root=UUID=${ddeeff} rw  kloop=$vhdfile  kroot=/dev/mapper/loop0p1
  15.         initrd        (loop0,1)/initrd.img
  16. }  
复制代码
对于不分区的img文件,(loop0,1)应该改用(loop0)。




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3