无忧启动论坛

标题: bug报告:加载NTFS分区的压缩文件出错 [打印本页]

作者: pky317    时间: 2016-11-6 21:33
标题: bug报告:加载NTFS分区的压缩文件出错
本帖最后由 pky317 于 2016-11-7 12:34 编辑

补充:1.下面提到的 启用压缩 是指用NTFS文件系统本身的压缩选项对文件进行压缩。
2.图片中显示的出错信息是加载到57xxMB后才出现的。
3.ramos.img的制作:用ImDisk新建12GB的空白文件并挂载、格式化,用WimTool将本机系统制作成wim文件,再将wim文件解开到12GB空白文件挂载的盘符中,这样可以保持系统的软、硬链接文件不被破坏。

利用FiraDisk制作了一个win7 32位内存系统,系统没有精简,保存在一个12GB的img格式的分区镜像里,文件名为ramos.img,ramos.img保存在NTFS分区里,在启用压缩前,ramos.img是可以正常加载到内存的,启用压缩后,加载出错,如下图所示。


压缩后的ramos.img没有损坏(md5值不变),分区镜像ramos.img采用的文件系统是NTFS,没有启用压缩,里面的软、硬链接文件没有破坏,文件约占用6.26GB,对ramos.img启用压缩后,ramos.img约占用4.11GB。经测试,和软、硬链接以及文件大小应该是没关系的,曾试过往ramos.img复制几十个视频文件,超过6.5GB,实测压缩后可以正常加载,空白的被NTFS压缩的ramos.img也可以正常加载。请老大们看看怎么回事,指点一下。

顺便给开发的老大提个建议:在加载lz4压缩格式的文件时,最好能同时打印加载进度,这样看着叫人心里暖和,情绪也稳定,如果只有一个光标在闪,文件大了,心里抓狂啊!
作者: 不点    时间: 2016-11-6 23:14
本帖最后由 不点 于 2016-11-6 23:17 编辑

我没看明白,不知道理解得对不对。

你是说 “ramos.img 用 NTFS 文件系统本身的压缩选项进行压缩” 吗?我这样理解对不对?

要知道,grub4dos 自身的 NTFS 驱动程序是不支持 NTFS 压缩的,因此,你这个方案是不可行的。

说明白点:grub4dos 不支持 NTFS 上的 “NTFS 压缩文件”。这么说很别扭,但只能这么说,才可以区别于其它压缩手段(比如 gz 或 lzma 之类的)。

关于 lz4 解压进度条丢失的问题,你再确认一下,你自己是否设定了 debug off 屏蔽输出结果?如果你最终证实确实有问题,可以向 chenall、yaya 报告 bug。


作者: pky317    时间: 2016-11-7 01:17
不点 发表于 2016-11-6 23:14
我没看明白,不知道理解得对不对。

你是说 “ramos.img 用 NTFS 文件系统本身的压缩选项进行压缩” 吗? ...

我说的正是用 NTFS 文件系统本身的压缩选项对ramos.img进行压缩,经测试,grub4dos是可以支持 NTFS 上的 “NTFS 压缩文件”的,至少对分区镜像文件(按扇区1:1复制的img格式)是支持的,我的一台老机使用的是XP内存系统,用的grub4dos版本是grub4dos-0.4.5c-2012-10-02,这个版本就已经可以正常加载用NTFS文件系统本身的压缩选项进行压缩的分区镜像文件了,不过这个版本在加载 用win7格式化的NTFS分区并启用压缩选项压缩的 分区镜像文件时,会提示找不到文件,最新的grub4dos-0.4.6a-2016-09-20版本不存在这个问题,我测试过,最新版本在加载启用NTFS压缩选项压缩的 空白的ramos.img或复制了几十个视频文件约6.5GB的ramos.img 都是成功的。
lz4解压确实没有进度条,我另发个帖子报告一下。
作者: pky317    时间: 2016-11-7 01:27
之所以想对 分区镜像文件ramos.img启用NTFS压缩选项进行压缩,是因为压缩过的ramos.img在加载时,当加载到ramos.img中未被使用的空白空间时,速度非常快。
作者: 不点    时间: 2016-11-7 09:19
很抱歉,是我弄错了。刚才看了 bean 的 fsys_ntfs.c 的代码,了解到 grub4dos 支持 “NTFS 压缩文件”。

但是我怀疑解压的代码存在 bug,因此,你遇到失败的情况。

解决办法:

1、报告 bug,看看开发者能否解决。

2、作为一个 workaround,避免采用 NTFS 压缩,而使用 lzma 压缩。


作者: pky317    时间: 2016-11-7 10:03
不点 发表于 2016-11-7 09:19
很抱歉,是我弄错了。刚才看了 bean 的 fsys_ntfs.c 的代码,了解到 grub4dos 支持 “NTFS 压缩文件”。

...

多谢关注!
原来使用XP内存系统时,不但ramos.img这个文件启用NTFS压缩,ramos.img包含的整个NTFS分区也启用NTFS压缩,直接chainloader /ntldr启动系统,使用一直正常。
先报告bug吧,不行就用其它压缩方式。
作者: liuzhaoyzz    时间: 2016-11-7 10:22
话说楼主为啥要用这种方法来压缩?用VDM加载ramos.img到某个盘符例如X:,然后对X:盘启用NTFS压缩,卸载后,用wincontig整理ramos.img,再用grub4dos加载,不就行了吗?NTFS压缩比也能达到70%左右。

作者: pky317    时间: 2016-11-7 10:32
liuzhaoyzz 发表于 2016-11-7 10:22
话说楼主为啥要用这种方法来压缩?用VDM加载ramos.img到某个盘符例如X:,然后对X:盘启用NTFS压缩,卸载后, ...

对ramos.img压缩,是为了加快加载ramos.img的速度。如果不对ramos.img启用NTFS压缩,加载ramos.img时,无论加载的位置是否有数据,加载的速度都是一样的。

---
之所以想对 分区镜像文件ramos.img启用NTFS压缩选项进行压缩,是因为压缩过的ramos.img在加载时,当加载到ramos.img中未被使用的空白空间时,速度非常快。
作者: liuzhaoyzz    时间: 2016-11-7 10:48
本帖最后由 liuzhaoyzz 于 2016-11-7 10:50 编辑

我所说的方法就是能够减小ramos.img的大小的呀,也是压缩的。我说的方法,我自己都是这样子玩的。建立一个新的ramos2.img,VDM加载到X盘,格式化,启用NTFS压缩,把ramos.img里面的文件拷贝过来就是了。

作者: pky317    时间: 2016-11-7 11:14
liuzhaoyzz 发表于 2016-11-7 10:48
我所说的方法就是能够减小ramos.img的大小的呀,也是压缩的。我说的方法,我自己都是这样子玩的。建立一个 ...

我是指对ramos.img这个文件本身启用NTFS压缩,而不是对ramos.img这个文件所包含的NTFS文件系统启用NTFS压缩,如果对ramos.img这个文件所包含的NTFS文件系统启用NTFS压缩,是不影响ramos.img这个文件本身的大小的。
作者: liuzhaoyzz    时间: 2016-11-7 12:40
对ramos.img里面的文件压缩后,占用空间变小,可以新建个更小的ramos2.img代替原来的ramos.img,论坛里大家不都是这么玩的?
作者: 不点    时间: 2016-11-7 15:29
liuzhaoyzz 发表于 2016-11-7 12:40
对ramos.img里面的文件压缩后,占用空间变小,可以新建个更小的ramos2.img代替原来的ramos.img,论坛里大家 ...

谢谢这个答复,这次还真的有点明白了。如果 pky317 也这么做,就可以躲过 grub4dos 在访问压缩的 ntfs 文件时的 bug 了。
作者: pky317    时间: 2016-11-7 20:07
不点 发表于 2016-11-7 15:29
谢谢这个答复,这次还真的有点明白了。如果 pky317 也这么做,就可以躲过 grub4dos 在访问压缩的 ntfs 文 ...

liuzhaoyzz的做法有个问题,就是内存系统盘的空间太小,有时临时下载东西或安装软件不方便。

刚才按照liuzhaoyzz的做法,新建一个6GB的ramos.img作为内存盘,win7系统文件经NTFS压缩后有1.2GB剩余空间,不过还是不行,只要对ramos.img这个文件启用NTFS压缩,加载时就会出错,这次是加载到55xxMB后出错,差几百MB就加载完了,可能是在处理未使用的空白空间时出问题的。
先采用lz4压缩,期待问题可以解决。




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