昨天在 mac 上删除了一个 40g 的文件夹,废纸篓也删了,删除后发现可用存储空间并没有增多,搜索了网上,说时间机器备份的问题,我根本没有打开那个自动备份,看到有人说重装系统可以解决,我重装了系统,也是不行,我计算了电脑上的所有文件,发现和显示的是是吻合的,难不成我昨天删除的是空文件夹,不可能啊,我为了释放空间专门找了个 40g 的文件夹删除的,
然后我突然想到那个照片文件夹包含几个小文件夹,里面的所有照片我统一复制到一个大文件夹里了,难不成同样的文件在磁盘下只存储一份,只占一份存储空间?我实验了一下把一个 40g 的文件夹拷贝了一份,发现存储空间也没有变少,卧槽,macos 牛逼啊,果然同样的文件只占一份存储空间 我靠,这是怎么实现的,我删除文件存储空间没有变化的原因找到了
1
duke807 2023-01-07 08:56:50 +08:00 via Android 2
这很简单,copy-on-write 即可,很通用的技术
|
2
Hack3rHan 2023-01-07 09:03:47 +08:00 via iPhone 1
APFS 是这样的
|
3
Alexonx 2023-01-07 09:08:27 +08:00 1
这是所谓的去重(Deduplication)特性,一般是由文件系统在数据块层面上实现的.不仅仅是 Mac 使用的 APFS,很多文件系统都支持这个特性.配合 COW(写时复制)技术,可以很好的改进时间机器的存储占用量(快照在底层实际上只存储修改了的部分).当然其实也不算特别"牛逼"或者"独一份"的技术,各个操作系统阵营的新文件系统都有这个功能(Windows-ReFS,Linux 和 Unix 阵营的 ZFS 等)
不是文件系统专业人生,如有疏漏请指正. |
4
cwbsw 2023-01-07 09:42:36 +08:00 4
技术是不新鲜,但是苹果应该是目前唯一在个人设备上大规模应用的。
|
5
luckyapple OP @duke807 但删除了文件没有释放空间确实让人很迷惑,而且网上一搜都没有正确答案
|
6
luckyapple OP @Hack3rHan 我还以为是 mac 系统出现了 bug😄
|
7
xiangyuecn 2023-01-07 09:55:26 +08:00 2
200 块的硬盘卖 2000 ,还帮你省空间,简直良心啊
|
8
luxinxin 2023-01-07 10:08:16 +08:00 via iPhone
收益上,个人设备上重复文件的比例不高,去重后收益不大。成本上,一方面类似这些“删了之后空间不变”或者“改一下文件要多使用很多空间”的现象普通用户不好理解,另外一方面无论是块级还是文件级去重,都有计算代价
|
9
xtinput 2023-01-07 10:16:19 +08:00
@xiangyuecn 200 块?哪一个型号的读写速度 7G/s 的 200 块钱?苹果官方是加 500G 1500 块钱,然后同样速度的三星是 500 块钱,而且苹果又没强迫你买,现在 windows 阵营也有很多内存固化在主板上了,说不定后面硬盘一样的固化
|
10
xtinput 2023-01-07 10:20:32 +08:00
@xiangyuecn 哦,还有,经销商拿货 8 折,所以 1200 500G ,而且 90%的用户都不会去定制硬盘,笔记本的硬盘只是用来运行系统的,资料基本都额外用移动硬盘,数据比硬件更值钱
|
11
kennir 2023-01-07 10:59:33 +08:00 1
这个就是当年 APFS 重点宣传的特性之一呀
|
12
shawnbluce 2023-01-07 11:40:25 +08:00
刚刚做了个实验,在 Terminal 中用 dd if=/dev/zero 生成了 1G 的文件,当时我电脑的「设置-通用-存储空间」里显示已用 201 G
|
13
shawnbluce 2023-01-07 11:43:51 +08:00
@shawnbluce #12
貌似是在 UI 上点复制粘贴和在终端里用 cp 命令的系统调用不同。 刚刚做了个实验,在 Terminal 中用 dd if=/dev/zero 生成了 1G 的文件,当时我电脑的「设置-通用-存储空间」里显示已用 201 G ,紧接着继续 cp 1g_data 1g_data_000; cp 1g_data 1g_data_001 这样 cp 下去发现每次显示的已用空间都会变大。但是我打开「访达」再 Command + C 然后 Command + V 之后再去看存储就不会增加。 而且也解开了我之前的一个好奇点:为什么同一个文件在 Terminal 中复制就比较慢,但是在访达中复制不论多大都很快。 |
14
cwbsw 2023-01-07 12:00:21 +08:00
@shawnbluce 命令行用 cp -c 就是写时复制。
|
15
wu67 2023-01-07 14:45:29 +08:00 1
我只知道, 我的音乐文件, 在存储空间里面, Music 分类算一次, Document 分类再算一次, 相当于一个文件占用了两份空间...
|
16
alamaya 2023-01-07 15:12:35 +08:00 via iPhone
@xtinput 不给用户自己扩展也叫不强制?更别说现在随便一个 pcie4 的 ssd 都有这速度,新 air 的丐版还缩水了
|
17
kaneg 2023-01-07 20:00:01 +08:00 via iPhone
有可能这种 copy 用的是 hard link ,在文件系统看上去是两个独立文件,但实际指向的是一个 inode 。
|
18
bjfane 2023-01-07 21:17:40 +08:00
很好的帖子,现在好像关于本机里面显示的占用很小,clean my mac 这种 显示的大。 然后我还是 pnpm 的重度用户,所以本来就有 hard link , 所以真实的占多少 都不知道了
|
19
ihwbunny 2023-01-09 06:02:17 +08:00
不是 hard link ,是 APFS 的特性而已
|