NTFS 原来那么强,可以把 12G 的文件,变成 140M。

2022-08-29 14:48:08 +08:00
 tool2d
我以前只知道 NTFS 可以打开压缩模式,但我不知道的是,就算不打开压缩,NTFS 也能把大文件变小。

在 android studio 下创建了一个 12G 的虚拟机,结果一看磁盘占用,才 140M 。

感觉白白赚了 10G 空间,爽到。

14648 次点击
所在节点    Windows
95 条回复
ipwx
2022-08-29 15:36:07 +08:00
只是声称这个文件有 120G 但是没有分配存储块而已。
lululau
2022-08-29 15:37:19 +08:00
user in host in ~/tmp/hole-files via Rb v3.0.0
❯ dd if=/dev/zero bs=1 seek=9000000000000 count=1 of=hole.txt
输入了 1+0 块记录
输出了 1+0 块记录
1 字节已复制,0.00207946 s ,0.5 kB/s

user in host in ~/tmp/hole-files via Rb v3.0.0
❯ l
总计 4.0K
-rw-r--r-- 1 user user 8.2T 8 月 29 日 15:35 hole.txt

user in host in ~/tmp/hole-files via Rb v3.0.0
❯ du -sh
8.0K .
moult
2022-08-29 15:45:48 +08:00
@liaohongxing
12G 压成 140M 还是很好做到的
比如: dd if=/dev/zero of=test bs=1M count=10240
生成的 10G 的文件,普通的 ZIP 压缩压出来也就几十 M
但没有任何实际意义
aloxaf
2022-08-29 15:51:23 +08:00
GrayXu
2022-08-29 15:53:01 +08:00
@tool2d 谢谢 LZ 让我知道原来 exFAT 是不支持稀疏文件的。
就想知道除了跨平台场景,exFAT 到底是谁在用
nothingistrue
2022-08-29 15:56:51 +08:00
@pupboss #1
@weak #11
@zcybupt2016 #12
@YSMAN #19
@ipwx #21
Size 11.7 GB ,Size on disk 138MB 。12G 资源已经分配了,后面是磁盘系统实际占用 138MB ,这个跟虚拟磁盘无关。
mystrylw
2022-08-29 16:24:26 +08:00
exFAT 不但不支持稀松文件,文件簇默认还是 128kb ,记得有一次往移动硬盘里拷贝了一堆小文件,瞬间满了。。
yanqiyu
2022-08-29 17:18:35 +08:00
太正常的 trick 了,linux 上
truncate -s 100T test 直接就可以创建一个声称大小是 100 T 的文件(哪怕你的盘没那么大)

你要去 du 就会发现这个文件不占空间
@moult 这种很好压缩的文件配合透明压缩存储会很舒适,但这个和稀疏文件是两个领域了
libook
2022-08-29 17:39:29 +08:00
exFAT 是一个除了兼容性其他方面都比较拉的文件系统,其可靠性完全不被建议用在任何重要场景(基本也就 U 盘比较适合用了)。
现代主流的文件系统(包括 NTFS )都挺牛批的,要不然也不会流行到现在。

其实一些其他主流文件系统也都支持类似的透明压缩机制,当文件有连续空白空间存在的时候都可以实现题主在 NTFS 上的这种效果,当然他们更多价值在于一些非空白数据的压缩上面,用 Unix/Linux 的话可以了解一下 Btrfs 、ZFS 等。
ButcherHu
2022-08-29 18:48:42 +08:00
这个只是能看到稀疏文件的宣称大小吧
butanediol2d
2022-08-29 19:10:18 +08:00
@mystrylw 簇大小这个是格式化的时候定的吧,Windows 的格式化工具会根据分区大小决定簇大小,大硬盘 Windows 甚至会把簇大小加到 512kb 。
1423
2022-08-29 19:18:37 +08:00
支持 op ,楼上的大多应该根本没用过 ntfs 压缩
baleeny
2022-08-29 20:06:23 +08:00
我记得之前我在 mac 上装的 docker 也是这个样子。。有个显示 64GB 的 docker 文件,实际磁盘占用很少。
germain
2022-08-29 20:20:29 +08:00
在 SSD 上务必关掉 NTFS Compression ,任何对压缩的文件的写操作都是一个完全解压缩的过程,特别你这种 11G 到 100 多 M 的“压缩”, 会极度加速你 SSD 报废的过程。
proxychains
2022-08-29 20:21:23 +08:00
qemu-img info xx.qcow2.
你看到的只是他虚拟机的实际大小. 里面填点东西再看大小
zlowly
2022-08-29 20:23:47 +08:00
我也是最近才发现 Mysql/MariaDB 的 innodb 开启的 Page Compression ,也是用到了文件系统的这种 sparse file 特性,而象 ext3 和 ntfs 这样都老文件系统也一早有这种特性了。
akira
2022-08-29 21:03:55 +08:00
这个和 ntfs 没啥关系吧。。

你随便填点东西进这个虚拟机就知道了
Yangz
2022-08-29 21:12:33 +08:00
啊,我第一次知道,学到了 ww
beijiaoff
2022-08-29 21:24:34 +08:00
@germain 改写 NTFS 压缩文件不会傻到先把未压缩文件写磁盘上,然后再压缩完写入替换之前的。这个可以设计试验验证,简单搜了一下也是有的。
mmdsun
2022-08-29 21:32:39 +08:00
试了下手动开启:随便找个文件夹,右键属性,常规,高级,勾选压缩内容已节约磁盘空间。

不过压缩率没楼主这么高,应该是两个东西吧 ?
《 The NTFS File System File Compression 》
https://docs.microsoft.com/en-us/windows/win32/fileio/file-compression-and-decompression

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/876196

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX