无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 8469|回复: 13

[求助] 用mkfs.ext4创建的img文件如何访问?

[复制链接]
发表于 2017-1-6 21:33:32 | 显示全部楼层 |阅读模式
用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 的虚拟盘。

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

点评

万分感谢,可能是我表达不清。我的意思是G4D无法访问mkfs.ext4做的镜像文件。该文件在linux下可以正常挂载,我把镜像文件里的vmlinuz和initrd.img提取出来并启动,可以看见linux已经把镜像文件作为根文件系统挂载了  详情 回复 发表于 2017-1-7 00:24
回复

使用道具 举报

 楼主| 发表于 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测试的。

点评

grub2有一个命令 loopback 可以满足只用一个文件的要求。大体命令是  详情 回复 发表于 2017-1-17 22:30
回复

使用道具 举报

发表于 2017-1-7 02:08:35 | 显示全部楼层
ext4 文件系统格式,grub4dos 是支持的。可能是你自己把什么东西弄错了(比如,命令敲错、设备号写错,等等),导致你无法在 grub4dos 环境下访问 ext4 分区里的文件。

点评

谢谢,这个镜像文件暂时是放在ext4分区的,主要问题是一执行map命令就卡死,没有任何提示。  详情 回复 发表于 2017-1-7 08:26
回复

使用道具 举报

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

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

点评

你先做个试验,把这个文件放在普通的 FAT32 或 NTFS 分区,再用 map ,看看是否可以成功。试验的目的是判断出,grub4dos 在访问 ext4 下的文件时,究竟是否有 bug。 你可以试试 0.4.5c 和 0.4.6a 两个版本系列,  详情 回复 发表于 2017-1-7 10:47
回复

使用道具 举报

发表于 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。

点评

没能重现开始遇到的情况。没有卡死,还是没有读取到镜像文件里的内容。 [attachimg]258810[/attachimg] [attachimg]258811[/attachimg]  详情 回复 发表于 2017-1-7 12:49
谢谢,我试试。  详情 回复 发表于 2017-1-7 10:56
回复

使用道具 举报

 楼主| 发表于 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 ,看看是否可以成功。试验的目的是判 ...

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

使用道具 举报

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

点评

谢谢,大概吧,我确实不知道问题出在哪儿。  详情 回复 发表于 2017-1-7 14:05
回复

使用道具 举报

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

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

使用道具 举报

发表于 2017-1-17 20:49:57 | 显示全部楼层
楼主这里的问题是使用了loop模式,就是传统的UBUNTU的WUBI安装方式了。这里主要问题是img文件太大,没有连续存放。
需要使用碎片整理软件dfsetup 或者 WContig 作一次碎片整理 ,可能可以解决问题。

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

使用道具 举报

发表于 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
回复

使用道具 举报

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

谢谢
回复

使用道具 举报

发表于 2017-1-17 22:30:32 | 显示全部楼层
本帖最后由 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)。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-28 19:26

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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