NTFS 压缩对文件到底起什么作用?

NTFS 压缩对文件到底起什么作用?

直到不久前,我甚至不知道可以使用 Windows 的内置压缩功能来压缩特定文件夹、文件甚至整个驱动器。一个简单的方法是转到属性并选中“压缩内容以节省磁盘空间”,然后一切就绪了。

第一次听说它时,我以为它就像压缩包压缩文件以减小大小或将所有文件合并到一个压缩文件中。但它似乎有不同的用例。

最有趣的是,文件被压缩了,但文件的哈希输出保持不变(使用第三方哈希计算器进行了简短的实验)。这怎么可能是真的?如果输入发生变化,哈希输出也必须发生变化(除非发生碰撞,这种情况非常罕见,并且与主题无关)。例如,假设我压缩了一个名为我的文档.pdf,我可以保持这种状态,将它放在 USB 驱动器或其他新安装的 PC 上,然后像普通文件一样使用它,而无需手动解压缩它等等?

当我在属性中检查文件大小时,大小甚至一个字节都没有改变,只有“磁盘上的大小”在减少。因此,文件的数据似乎保持原样(相同的哈希值可能证明了这一点),但从操作系统端读取时,它只是压缩和解压缩。

另一个问题是:还有另一种使用命令行提示符的压缩算法,方法是输入“compact.exe /compactos:always”。两者之间有什么区别?

最近,Windows 让我很头疼 :/

答案1

NTFS 压缩对文件到底起什么作用?

默认情况下,它透明地使用 Lempel-Ziv 压缩的变体对其进行压缩:

LZNT1压缩算法是唯一实现的压缩算法。因此,使用LZNT1压缩算法作为DEFAULT压缩方法。

来源:FSCTL_SET_COMPRESSION 控制代码

当你读取文件时(例如计算文件哈希值)透明地即时解压缩。


还有另一种使用命令行提示符的压缩算法

compact.exe /compactos:always”,这两者有什么区别?

compact显示或更改 NTFS 分区上的文件的压缩。

always将压缩所有操作系统二进制文件并将系统状态设置为非压缩。

它仅支持针对文件的不同算法exe

/EXE Use compression optimised for executable files which are read frequently and not modified,

Supported algorithms are:

XPRESS4K (fastest) default 
XPRESS8K 
XPRESS16K 
LZX (most compact)


/CompactOs  Set or query the systems compression state.

Supported options are:

query  - Query the systems compact state.
always - Compress all OS binaries and set the system state to non-compact.
never  - Uncompress all OS binaries and set the system state to compact which remains unless an administrator changes it.

来源:压缩 - 压缩文件 - Windows CMD - SS64.com


进一步阅读

答案2

@DavidPostill 的回答是正确且完整的,但也让我尝试解释一下:

NTFS 压缩对于使用它的任何应用程序都是透明的。这意味着对于每个:

  • 读取文件,文件在呈现给应用程序进行显示/哈希计算/复制到某处/等之前被解压缩。
  • 文件的写入,应用程序写入文件后,文件会被压缩。

表现:理论上,由于正在进行压缩/解压缩,读取/写入文件的速度会稍微慢一些。但是,这在当今通常可以忽略不计,并且也可能通过驱动器需要存储较少的信息来抵消。

管理:

  • Windows 资源管理器会显示您正在使用的磁盘空间量,以及文件未压缩时会占用的空间量。
  • compact.exe还会向您显示这一点,并允许您启用/禁用文件压缩。compact.exe /CompactOs:always将设置 Windows 压缩所有操作系统二进制文件。

相关内容