为了节省一些磁盘空间,我认为压缩我安装的 VMware vSphere Client 可能是个好主意,因为我几乎从不使用它。
令我惊讶的是,它对可用磁盘空间产生了完全相反的影响。我进一步追踪,发现它与压缩文件夹有关Help
。磁盘空间的损失并没有反映在文件夹大小上。
我重复了三次压缩/解压循环,以确保其他程序不会同时占用磁盘空间。值得注意的是,该文件夹中包含大量小文件(≈ 30k)。
为什么会这样,我能以某种方式找到我应该找到的其他文件夹吗?解压缩节省磁盘空间?
未压缩:
压缩后:
答案1
关于您提供的文件夹大小屏幕截图的一些背景知识:
未压缩
正如预期的那样,许多小文件会产生很大的开销。您的硬盘分区具有一定的块大小 - NTFS 默认为 4KB。
每个文件必须分配 4KB 的倍数,这意味着无论您有 1KB 还是 3.5KB 的文件,它们都将占用 4KB 的空间。如果您有一个 13KB 的文件,它将在您的驱动器上使用 16KB。“大小”和“磁盘上的大小”之间的差异是未使用的空间(即所谓的群集提示。
压缩
压缩后,“大小”仍然相同,因为净数据量根本没有变化。但是压缩可以将总大小减少约 130MB。实际上甚至更多,因为这里的开销也适用。因此压缩确实节省了该文件夹中的一些空间,并且这也显示在文件夹大小中。
现在关于您看到的 C 盘可用磁盘空间减少的行为:这可能有多种原因。要理解的一件事是,可用磁盘空间始终小于
<Disk size> - <total size of all files>
这是因为有大量元数据也会占用空间(VSS 快照、系统还原点、MFT 等)。
在压缩单个文件时,NTFS 将暂时保留原始文件,直到压缩完成。这是为了确保即使您的计算机崩溃,您仍能保留文件的有效版本。但这应该只是暂时的。尽管如此,一切都表明 NTFS 元数据导致了这种情况。
为了更准确地验证结果,您可以执行以下操作:
- 从未压缩的文件夹开始
- 禁用每个卷的系统保护(计算机属性/系统保护)
- 在同一对话框中删除每个卷的还原点
- 使用 C 卷属性中的“磁盘清理”删除临时文件
- 注意可用磁盘空间
- 压缩文件夹
- 重启你的电脑
- 再次使用磁盘清理
- 检查磁盘上的可用空间
理论上你应该能够看到可用空间的增加
答案2
最近研究过类似的问题,我也可以说每个压缩文件至少占用 4 千字节的空间,临时空间为 64 千字节,这是 NTFS 的一个“压缩单元”的大小,簇大小为 4kb。blogs.msdn.com 上的文章还提到,当文件被压缩时,磁盘空间被分配以容纳一个完整的 CU,并在不确定的时间释放。这应该是您经历 5GB 损失的原因,尽管是暂时的(重新启动肯定可以修复该损失,其他一些方法也可以做到这一点,但不是碎片整理 - 已经尝试过并且失败了)。显然,分配的内容似乎要大得多(64kb*(31048+582) = 2072903680 或 1.93 GB),但这是可以解释的,因为 NTFS 具有需要时间和处理器单元才能提交到原始数据的事务,并且当该过程完成时,您将获得所有 5GB 加上由于压缩而释放的 150 MB 空间。
总而言之,如果您压缩大量文件,您只会暂时失去空间。但是,如果这些文件经常被修改,您的磁盘空间将被分配用于保存这些文件的未压缩数据,以防更改的内容无法压缩以适应写入操作之前该群集所占用的任何空间。
答案3
我也有同样的现象:
服务器迁移时,我将旧 Windows Server 2012R2 驱动器的数据文件夹(包含 2 个压缩文件夹)复制到相同大小的新 Windows Server 2016 Datacenter 驱动器上,我在复制过程之前创建了文件夹结构并在这两个文件夹上设置了压缩标志。在复制过程中,我用完了磁盘空间,我查看到只有 20GB 中的 3GB 被使用,但驱动器本身告诉我使用了 19.x GB。一位同事告诉我删除压缩标志,奇迹般地,丢失的 17GB 又重新出现了。
然后我阅读了你的文章并决定重新应用该标志并尝试重新启动,但有趣的是这次使用的磁盘空间并没有增加。
我猜测 Windows Server 2016 中可能存在一个问题(可能从那时起就存在这个问题),即当文件被复制到压缩文件夹时(而不是将压缩标志应用于已经存在的文件时),内部生成的临时文件没有被正确清理。
答案4
附加:除了上述解释之外,应用程序文件夹可能包含压缩效果不佳的文件 - 数据已经严重减少的媒体格式(jpeg图像,视频文件,mp3音频......),已经压缩的文件(现在很多数据格式都是以ZIP档案形式构建的!),实际上包含随机数据或类似随机数据的文件,加密文件 - 这可能会导致用于记录压缩内容的数据比压缩节省的数据还多......