NTFS 压缩文件夹:是否可以调整压缩率?

Al *_*ger 18 windows compression ntfs

看起来,Windows 以尽可能低的压缩率压缩 NTFS 压缩文件夹。虽然这可能有利于提高速度和降低 CPU 负载,但对于很少访问的文件(备份文件夹),有可能提高压缩率会更明智。是否可以调整一些参数来实现这一点?

phu*_*clv 16

通常这是不可能的,如and31415's answer 所示

不过微软在 Windows 10 中添加了一些新的 NTFS 压缩选项和算法,所以现在有一种方法可以改变压缩率:

COMPACT [/C | /U] [/S[:dir]] [/A] [/I] [/F] [/Q] [/EXE[:algorithm]]
        [/CompactOs[:option] [/WinDir:dir]] [filename [...]]
...
  /EXE       Use compression optimized for executable files which are read
             frequently and not modified.  Supported algorithms are:
             XPRESS4K  (fastest) (default)
             XPRESS8K
             XPRESS16K
             LZX       (most compact)
Run Code Online (Sandbox Code Playgroud)

新算法适用于新的Compact OS 功能(如您在/CompactOs上面的选项中所见)。这个想法是以最高的比率压缩只读、备份和不常访问的系统文件。恢复分区被删除,然后压缩文件将用于执行(如果它已经是最新版本)和恢复目的

LZX 算法在归档方面非常有效。尽管选项名称和描述都是关于“可执行文件”的,但该选项可以应用于任何文件

E:\test>compact /a

 Listing E:\test\
 New files added to this directory will not be compressed.

  1050909 :   1050909 = 1.0 to 1   sometext.txt

...

E:\test>compact /c /exe:lzx sometext.txt

 Compressing files in E:\test\

sometext.txt          1050909 :    176128 = 6.0 to 1 [OK]

1 files within 1 directories were compressed.
1,050,909 total bytes of data are stored in 176,128 bytes.
The compression ratio is 6.0 to 1.
Run Code Online (Sandbox Code Playgroud)

然而,与旧算法不同的是,它们不支持即时编辑,因此写回文件会对其进行解压缩。

E:\test>echo x >> sometext.txt

E:\test>compact /a

 Listing E:\test\
 New files added to this directory will not be compressed.

  1050913 :   1050913 = 1.0 to 1   sometext.txt
Run Code Online (Sandbox Code Playgroud)

一个重要的注意事项是,您不能将文件夹设置为使用这些新算法自动标记要压缩的新文件,因为如compact(强调我的)的帮助部分所述

  /C         Compresses the specified files.  Directories will be marked
             so that files added afterward will be compressed ***unless /EXE
             is specified***.
  /U         Uncompresses the specified files.  Directories will be marked
             so that files added afterward will not be compressed.  If
             /EXE is specified, only files compressed as executables will
             be uncompressed; if this is omitted, only NTFS compressed
             files will be uncompressed.
Run Code Online (Sandbox Code Playgroud)

因此,如果您想将它们用于备份文件,您可能必须在备份后或一段时间后定期运行脚本以手动压缩

不幸的是,这是 Windows 10 中的新功能,因此不能在旧版本中使用。但是NTFS-3g 确实支持它,因此您从 Linux 访问它不会有问题。如果您不使用 Windows 10,则可以运行 Linux live USB 或 Windows 10 PE 来打开这些文件


and*_*415 14

简答

不,目前不可能。

长答案

通过向API函数传递控制代码和压缩状态来压缩和解压缩文件和文件夹1。压缩状态可以是以下之一:FSCTL_SET_COMPRESSIONDeviceIoControl

COMPRESSION_FORMAT_NONE = 0
COMPRESSION_FORMAT_DEFAULT = 1
COMPRESSION_FORMAT_LZNT1 = 2
Run Code Online (Sandbox Code Playgroud)

任何非零值都意味着目标项目将被压缩。来自官方文档:

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

来源:FSCTL_SET_COMPRESSION 控制代码

LZNT1 算法专为速度而设计,无法设置自定义压缩级别。

1文件夹实际上并未压缩:它们的压缩属性仅为新文件和子文件夹提供默认压缩状态。

附加信息

NTFS 文件系统卷支持基于单个文件的文件压缩。NTFS 文件系统使用的文件压缩算法是 Lempel-Ziv 压缩。这是一种无损压缩算法,即压缩和解压文件时不会丢失任何数据,而JPEG等有损压缩算法每次进行数据压缩和解压时都会丢失一些数据。

在 NTFS 文件系统上,压缩是透明执行的。这意味着无需更改现有应用程序即可使用它。

如果压缩大于 30 GB 的文件,则压缩可能不会成功。

来源:文件压缩和解压

NTFS 中的压缩算法旨在支持高达 4 KB 的簇大小。当 NTFS 卷上的簇大小大于 4 KB 时,没有任何 NTFS 压缩功能可用。

来源:文件和文件夹压缩

进一步阅读