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

ddd*_*sdf 21 windows compression ntfs

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

\n

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

\n

最有趣的是文件被压缩,但文件的哈希输出保持不变(使用第三方哈希计算器进行的简短实验)。这怎么可能是真的呢?如果输入发生变化,哈希输出也必须发生变化(除非发生冲突,这种情况非常罕见且偏离主题)。例如,让\xe2\x80\x99s 说我压缩了一个名为MYDOCUMENT.pdf的文件,我可以保持这种方式,将其放在 USB 驱动器或其他新安装的 PC 上,然后使用它,因为它只是普通文件,无需手动解压它之类的?

\n

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

\n

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

\n

Windows 这些天让我头疼:/

\n

Dav*_*ill 28

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.
Run Code Online (Sandbox Code Playgroud)

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


进一步阅读

  • 否 - 当您读取文件时,文件将被解压缩,并且如果您将其移动到另一个驱动器,文件将保持这种状态。 (13认同)
  • @TLW 压缩是半随机访问。始终压缩 64Kbytes/16 个簇(不支持压缩大小不同于 4K 的簇)。如果它们占用的空间较少(至少少一个簇),则它们将以压缩形式存储,否则这 64KB 的数据将按原样存储 - 至少以原始 NTFS 压缩形式存储。 (8认同)
  • @Nav。没有“Linux 支持 NTFS 驱动器的透明压缩。” 请参阅[Ubuntu 是否支持使用压缩的 Windows 文件?](https://unix.stackexchange.com/a/670061) (3认同)
  • 需要注意的是,为了支持“半随机访问I/O”,【NTFS透明文件压缩的​​压缩比较差】(https://devblogs.microsoft.com/oldnewthing/20160718-00/?p =93895)比 WinZip 或 7-Zip 等非透明压缩工具要好。 (2认同)