原来 Mac 和 iPhone 的文件系统 HFS+这么烂

2017-06-02 16:32:22 +08:00
 porrat

[HFS+的元数据有全局锁,同一时间只有一个进程可以访问更新文件系统。在单核处理器连手机平板都较少见到的当今,这种设计显得很幼稚。]

[HFS+亦没有稀疏文件的支持]

[此外,HFS+不具备元数据校验功能、快照功能、写入时复制功能、就地执行功能、逻辑卷管理功能等很多现代磁盘系统所具备的功能,也不能动态调整文件块大小。这些功能的加入并不容易。]

[其中最要命的是,HFS+不像一些先进的文件系统,支持写入时复制事务模型,也没有快照和克隆。这使得用户数据时时处于风险之中。例如由于因为断电、内核崩溃等原因,文件系统上写到一半的数据,小则导致个别文件损坏,大则导致整个文件系统崩溃。]

全文见 https://www.evernote.com/shard/s102/sh/f87ec062-7202-4159-923f-bb85ade713b4/3bdb40cdd132beb6

Apple 知道 HFS+这么不稳定,所以很早就搞出了 Time Machine ?

13407 次点击
所在节点    程序员
51 条回复
goodryb
2017-06-02 17:26:46 +08:00
@we000 上面少 @楼主了,第 2、3 段忽略
sobigfish
2017-06-02 17:32:05 +08:00
我就想知道 磁盘高度文件碎片是不是 NTFS FAT 独有的
we000
2017-06-02 17:35:47 +08:00
@goodryb 问题就是慢啊, iPhone 改用 APFS 简直就是喜大普奔. 这么老的系统一直等到 2017 年才升级实在是说不过去. 事实上, HFS+发布的时候就是落后于时代的...

而且很多说没遇见过文件系统问题的朋友, 我个人拙见就是场景太简单, 如果作为一个服务器的应用场景, HFS+都不够格. 强调一遍, 个人意见, 拙见.
ayang23
2017-06-02 17:40:59 +08:00
前几天刚刚在把一个文件夹 B 复制到 ntfs 移动硬盘的一个文件夹 A 下,结果移动硬盘供电不足中间断开,导致文件夹 A 整个丢失,B 下的原有文件也没了。操作系统是 ubuntu 16.04. 这个锅是 ntfs 的还是 linux 下 ntfs 驱动的就不知道了。起码说明 linux 下 ntfs 文件系统是不抗断电的,断电会导致文件夹整个消失。
goodryb
2017-06-02 17:47:02 +08:00
@we000 #23 服务器为什么要用 HFS+ ?
gemini767
2017-06-02 18:04:58 +08:00
@goodryb 落后到 2017 年就是大问题的意思是一个 fs 用了快 20 年不更新是一个问题,apple 早应该迭代掉 HFS+,而并不是说 HFS+本身设计有问题
fatedier
2017-06-02 18:16:10 +08:00
@Felldeadbird 是因为你不是重度使用吗?我觉得稳定性非常一般,两年内死机,自动重启,黑屏,各种问题应该不下 10 次了,遇到问题都是重启解决。
honeycomb
2017-06-02 18:50:54 +08:00
@we000
refs 性能极差,特别是开启了 row 特性以后

@ayang23
这是可以发生的,但是你应该尝试用 diskgenius 之类的工具修复一下不是么
nicevar
2017-06-02 19:00:37 +08:00
这是该更新换代了,用 mac 一定得用 time machine 时不时备份,文件系统挂掉几率还是有的,有时候系统升级就会导致,还有时候莫名其妙 volume 就不能挂载了
327beckham
2017-06-02 20:01:16 +08:00
我就想了解一下,macOS 的文件系统的过时,对于大家使用 macOS 系统,有没有带来什么样的负面影响?我个人,用了 8 年 mac 系统的程序员,目前还没有遇到文件系统的坑。
billlee
2017-06-02 20:12:38 +08:00
@likuku #5 XFS 还是有元数据校验的
ItzhacLea
2017-06-02 22:26:00 +08:00
Time Machine 賴以實現的硬連結,個人覺得是非常不優雅的解決方案,它的實現方式參考如下:

As long as a file is not multi-linked, everything is fine; when it gets its first 'hard link' some major shuffling is needed.

1. Create the directory \0\0\0\0HFS+ Private Data if it doesn't already exist.
2. Grab the record for the original file (and its CNID) and put it in \0\0\0\0HFS+ Private Data.
3. Transform the original record from type 'hfs+' to type 'hlnk' and give it a new CNID (and make sure the thread CNID points to this new record instead).
4. Make a similar 'hlnk' record for the new file name.

所有被硬連結的文件都會放入「 HFS+ Private Data 」文件夾下,然後把原文件替換成一個指向該文件夾下相應文件的連結。#這文件夾崩了硬連結豈不美滋滋?#

幾年前玩黑蘋果的時候,想通過 Paragon HFS+ for Windows 查看 Time Machine 下的文件時,發現文件佈局和我在 macOS 下看的完全不一樣。當時的我還太年輕,不知命運給我的硬連結,都會有怎樣的代價。
ItzhacLea
2017-06-02 22:29:31 +08:00
lydasia
2017-06-02 22:49:06 +08:00
你也不看看 hfs+是什么年代的东西了。你看看 fat32 对大文件的支持和 exfat 的坑爹可靠性吧。
sinxccc
2017-06-02 22:55:06 +08:00
@327beckham 最直观的问题就是无处不在的 .DS_Store 文件了。
levn
2017-06-02 22:57:16 +08:00
当初企图换 zfs 没换成而已……
sinxccc
2017-06-02 22:57:20 +08:00
至于 Time machine 本身是个不错的备份方案,跟 HFS+ 的稳定性没什么大关系吧。即使后面有了新文件系统,TM 还是会继续存在,而且在效率和空间利用上应该会有提高。
daimao
2017-06-02 22:59:53 +08:00
哪家公司没有历史包袱
ayang23
2017-06-02 23:08:27 +08:00
@honeycomb 可以找到文件,但目录结构就没了
honeycomb
2017-06-02 23:16:53 +08:00
@ayang23 我几个小时前也遇到了类似的问题

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

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

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

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

© 2021 V2EX