不知 发表于 2017-1-6 21:33:32

用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:58

反复看了半天,总算隐隐约约猜出你的意思了。以下就按我所猜测到的意思去理解和回复。

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

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

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

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

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

不知 发表于 2017-1-7 00:24:30

不点 发表于 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:35

ext4 文件系统格式,grub4dos 是支持的。可能是你自己把什么东西弄错了(比如,命令敲错、设备号写错,等等),导致你无法在 grub4dos 环境下访问 ext4 分区里的文件。

不知 发表于 2017-1-7 08:26:36

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

谢谢,这个镜像文件暂时是放在ext4分区的,主要问题是一执行map命令就卡死,没有任何提示。

不点 发表于 2017-1-7 10:47:28

不知 发表于 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:52

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

谢谢,我试试。

不知 发表于 2017-1-7 12:49:39

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

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


不点 发表于 2017-1-7 13:19:00

好的,我这么理解:你无法确定问题的范围。这样吧,等你弄清楚了问题的大致范围之后,再作研究。现在先搁置这个问题吧。

不知 发表于 2017-1-7 14:05:49

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

谢谢,大概吧,我确实不知道问题出在哪儿。

2011niumao 发表于 2017-1-17 20:49:57

楼主这里的问题是使用了loop模式,就是传统的UBUNTU的WUBI安装方式了。这里主要问题是img文件太大,没有连续存放。
需要使用碎片整理软件dfsetup 或者 WContig 作一次碎片整理 ,可能可以解决问题。

另一种方法也可以把引导文件,/boot/vmlinuz-XXXX,/boot/initrd.img-XXXXX 拿出来,使用grub4dos来引导,不需要整理碎片。

2011niumao 发表于 2017-1-17 21:23:47

建议 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:27

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

谢谢

2011niumao 发表于 2017-1-17 22:30:32

本帖最后由 2011niumao 于 2017-1-18 10:34 编辑

不知 发表于 2017-1-7 00:24
万分感谢,可能是我表达不清。我的意思是G4D无法访问mkfs.ext4做的镜像文件。该文件在linux下可以正常挂 ...

grub2有一个命令 loopback 可以满足只用一个文件的要求。一个菜单样式menuentry " UBT-small.vhd " --classubuntu {
        insmod gzio
        insmod part_msdos
        insmod part_gpt
        insmod ext2
        insmod ntfs
        insmod probe
        set vhdfile="/ubt/UBT-small.vhd"
        set root=(hd0,1)
        search --no-floppy -f --set=aabbcc$vhdfile
        set root=${aabbcc}
        probe -u --set=ddeeff ${aabbcc}
        loopback loop0 $vhdfile
        linux        (loop0,1)/vmlinuz root=UUID=${ddeeff} rwkloop=$vhdfilekroot=/dev/mapper/loop0p1
        initrd        (loop0,1)/initrd.img
}对于不分区的img文件,(loop0,1)应该改用(loop0)。
页: [1]
查看完整版本: 用mkfs.ext4创建的img文件如何访问?