Board logo

标题: [讨论]关于系统的文件夹压缩 [打印本页]

作者: willsort     时间: 2006-3-23 20:51    标题: [讨论]关于系统的文件夹压缩
To All:

很早就注意到,在Windows系统目录下,类似“$NtUninstallKB885835$”的更新程序卸载备份文件夹的名字是蓝色的,只是一直无暇追究其中的缘由,想来不过是彰显文件夹的某些特殊属性而已。

最近,开始清理系统盘空间,偶然发现在这些蓝色名字的目录有个奇怪的特性,即在右键属性菜单中的常规选项卡中,文件的<占用空间>总是小于文件的<实际大小>,而这与我脑中的占用空间比不小于文件大小的常规知识向矛盾。

因为在FAT和NTFS文件系统中,文件以簇的形式占用磁盘空间,文件大小的不规则导致它很可能无法将所使用的簇恰好占满,而某些簇中的剩余空间因为无法收集而被废弃,因此文件的占用即为文件所用簇的占用空间,它必然是1024或其他大小(XP为4096)的整数倍,也因此它必然大于等于文件的实际大小。

不解之余,上百度搜索答案,不久即赧然一笑,却原来是压缩后的文件夹,使用的乃是属性菜单常规选项卡“高级”选项对话框中的“压缩”功能。所有使用“压缩”的文件或文件夹名字均为蓝色,既已压缩,占用空间小于实际大小的谜底也就揭开了。

但是不久,新的疑惑就接踵而来,我做了一些简单的测试:如果将这个压缩文件(夹)复制到其它目录下,则不再具有压缩特性;如果将这个压缩文件(夹)移动到其它目录下,则压缩特性保留;而如果将这个压缩文件(夹)复制后再移动的相同的目录下,则移动特性消失。由此移动结果推断,“压缩”应属于文件或文件夹自有的一种“属性”,但它却为何无法通过复制进行传递?

另外的一些测试表明,此种压缩的压缩率很低,一个2M的文本文件压缩后还有1.8M,而使用WinRAR可以压到0.8M,而它对使用WinRAR压缩过的文件会自动选择不再压缩,依此推测系统的压缩算法是牺牲压缩率来换取压缩速率。

还有的一点发现,或者说“未发现”,就是系统的解压过程对于我所测试的任何测试都是透明的,即使是在CMD或者COMMAND环境下,也可以正确无误的浏览压缩后的文本文件。没有在DOS下测试,因为是NTFS卷,若使用外部驱动支持,就无法真正得知其是否完全透明了,因为我无法断定,NTFS的DOS驱动是否也会透明的解压。而且在Windows下找到它的压缩后的“原始状态”似乎更有意义。

Last edited by willsort on 2006-3-23 at 21:06 ]

作者: Wengier     时间: 2006-3-24 00:55
复制后无法保留压缩属性应该类似Unix下的iNode的特点,如果当复制后就相当于产生了新的数据,与以前的iNode不再相关,所以原有的压缩属性不复存在;而移动则仅仅是将链接指向改变,而iNode仍为原状,所以其压缩属性保持不变。

作者: fujianabc     时间: 2006-3-24 11:22
这个压缩功能是伴随着ntfs的出现而产生的,已经有很长的时间了。

ntfs压缩是一种追求速度而不是追求压缩率压缩算法。

记得dos下面的ntfsdos加载时可以选择不支持ntfs压缩。

对于一个ntfs卷,除了ntldr之外的所有文件都可以压缩,但是压了ntldr后则系统无法启动。

如果想看到ntfs压缩之后的“原始状态”,可以用一些磁盘编辑软件察看。

作者: 6622186     时间: 2007-4-24 05:27
开始, 我压缩过, 但是发现文件本身并没有变小只是颜色变了, 并且访问透明, 我始终不解, 后来到网上搜索了下, 再右击文件属性, 发现占用空间确实变小了, 才明白其中原委.

作者: 6622186     时间: 2007-4-24 05:29
NTFS 代表着 NT 的新特性

作者: lpk130     时间: 2007-4-24 05:55
NTFS的新特性还包括EFS加密
这些操作对用户来说都是透明的

作者: 06403213     时间: 2007-10-7 02:09
今天我也发现了这个问题,并且上DOS联盟搜了一下找到了这个帖子,和我理解的也差不多。。压缩是透明的是不是说,压缩以后不用解压还能用啊。。这种磁盘压缩文件的分配单位还是以簇为单位了,及是4096的整数倍。只有压缩文件不遵守。不知道有高手能不能说一下磁盘压缩的技术是什么?实在是不解。