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

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

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

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

15673 次点击
所在节点    Windows
95 条回复
tool2d
2022-08-30 14:23:06 +08:00
@debuggerx 都是抄袭 NTFS 的,NTFS 是差不多 30 年前发明的,别的系统推出,都比他要晚。
dog82
2022-08-30 14:34:07 +08:00
感觉按需扩容,跟 ntfs 没关系
JohnBull
2022-08-30 14:37:55 +08:00
@tool2d 打有狗那年,ext2 就支持文件空洞,是 POSIX 规定的的标准技能了
ipwx
2022-08-30 15:07:30 +08:00
@nothingistrue "Size 11.7 GB ,Size on disk 138MB 。12G 资源已经分配了,后面是磁盘系统实际占用 138MB ,这个跟虚拟磁盘无关。"
----

对不起真的和虚拟磁盘有关。

香农老爷子已经明确告诉你了,信息的压缩比是有极限的。12G=>138MB ,显然大部分数据位都是 0 ,所以才能把那部分 0 的位置给压缩出来。这恰恰是虚拟磁盘才会有的特性。

@tool2d 这部分评论也适用于楼主。不信楼主你在虚拟系统里面随便放个 10GB 的视频文件再删掉,然后你再看看 NTFS 能给你压缩到多大。

----

从这个意义上,“它只是声称 12G” 一点毛病都没有。不论是 NTFS 层面声称 12G (但不占用),或者预留出 12G (占用)。反正真正原因是没有写入非 0 数据所以才看上去有这么牛逼的压缩比。
debuggerx
2022-08-30 15:12:34 +08:00
BSD FFS: 1983
VxFS: 1991
EXT: 1992
EXT2: 1993.1
……
NTFS: 1993.7

@tool2d 谁抄袭谁?
tool2d
2022-08-30 15:15:43 +08:00
@ipwx “你在虚拟系统里面随便放个 10GB 的视频文件再删掉,然后你再看看 NTFS 能给你压缩到多大。”

肯定就是 10G ,这点还是清楚的。以前虚拟机的方法都是按需分配,用多少容量分配多少。现在是先分配,然后磁盘上全是洞洞,就感觉很有意思。
nothingistrue
2022-08-30 15:20:29 +08:00
@ipwx #64 你为何对 Size 这么大误解,文件的 Size 就是在文件系统上的已经申请出来的大小。预定义但没申请的磁盘,这个是只能程序自己保留的,这也不是虚拟磁盘的特性,任何一个程序都能这么干。
tool2d
2022-08-30 15:23:00 +08:00
@debuggerx NTFS 是有专用稀疏文件 api ,而 linux 在 EXT2 之前也就只有一个 inode ,都要手工 hack 。严格意义上 EXT3 开始正式导入 API 。

我去 github 搜了一下,SEEK_HOLE 是很后面才正式加入的。
nothingistrue
2022-08-30 15:32:59 +08:00
@ipwx #64 扇自己一巴掌,Size on disk 才是磁盘占用空间。但是这个 12 G ,仍然是 NTFS 文件系统的事。
qsnow6
2022-08-30 15:40:12 +08:00
所谓的动态分配和用 0 填充不就是一个意思吗?不然能维持这么高的压缩比?没必要杠
nothingistrue
2022-08-30 15:42:26 +08:00
@tool2d Hyper-V 的 VHDX 动态磁盘,应该有助于区分虚拟磁盘的动态分配,跟 NTFS 文件系统的稀疏文件。如果你有 Hyper-V 的话,创建一个 VHDX 动态虚拟磁盘,然后把虚拟机内磁盘大小、宿主机上文件的 Size 、宿主机上文件的 Size on disk 都列出来,应该就能终结此贴的争论了。
mxT52CRuqR6o5
2022-08-30 15:54:12 +08:00
@nothingistrue 一个需要文件系统提供能力,另一个完全不需要文件系统提供什么能力,完全靠自己的业务代码就能实现
ipwx
2022-08-30 15:54:22 +08:00
?好怪,我不知道 @nothingistrue 一本正经地想要纠正我啥。

按照这个形式,这个案例确实是声称了文件有 12G ,确实没有分配物理的存储块啊?不管是 NTFS 层面的“压缩”手段,还是 NTFS 的稀疏文件,还是 Linux 啥神奇 Hack ,不都是实现这个效果的某种手段嘛。

我也没有深入各个文件系统不同的实现方式,
mxT52CRuqR6o5
2022-08-30 15:57:22 +08:00
OP 的重点明显在于稀疏文件上
『哦,原来文件系统还会提供这种能力』
别搁那儿动态分配了
lengyuqu
2022-08-30 16:04:02 +08:00
ntfs 都要 30 年的古董文件系统了,互联网真是太神奇了
nothingistrue
2022-08-30 16:12:02 +08:00
@ipwx #73 文件系统跟虚拟磁盘动态分配,是两码事。Size 12G ,Size on disk 137M ,这是文件系统干的事,不是虚拟磁盘动态分配干的事。我只是说出这些事实而已。
ipwx
2022-08-30 16:29:18 +08:00
@nothingistrue ?我一开始就没说是虚拟磁盘干的事情啊。。。

“只是声称这个文件有 120G 但是没有分配存储块而已。”——虽然笔误写成了 120G 。我这里说的是操作系统没分配(物理)存储块,这有问题吗?
lhhtyid1
2022-08-30 18:13:12 +08:00
@youshangdemajia 不可能,绝不可能🐶
chxf
2022-08-30 20:52:20 +08:00
问题不会答,只会看热闹了。。。。
beyondex
2022-08-30 21:09:43 +08:00
NTFS 还有一个 MFT / USN 特性,这也是 Everything 能对 NTFS 磁盘实现全屏秒搜的原因。

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

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

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

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

© 2021 V2EX