V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
porrat
V2EX  ›  程序员

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

  •  
  •   porrat · 2017-06-02 16:32:22 +08:00 · 13346 次点击
    这是一个创建于 2519 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    51 条回复    2017-06-05 10:49:19 +08:00
    sfz97308
        1
    sfz97308  
       2017-06-02 16:37:08 +08:00
    所以有了 APFS
    QAPTEAWH
        2
    QAPTEAWH  
       2017-06-02 16:44:49 +08:00
    很多功能 ext4、ntfs 也没有嘛。只有真正比较新(unstable)的 fs 才有。

    [文件系统上写到一半的数据,小则导致个别文件损坏,大则导致整个文件系统崩溃。] 一般日志型文件系统,断电会丢文件,整个挂掉没听说过。
    Weny
        3
    Weny  
       2017-06-02 16:46:02 +08:00 via iPhone
    APFS 这不马上都换上了嘛
    ivmm
        4
    ivmm  
       2017-06-02 16:47:07 +08:00
    作为商业公司的苹果出 APFS,效率比开源社区的 FS 高
    likuku
        5
    likuku  
       2017-06-02 16:54:20 +08:00
    [此外,HFS+不具备元数据校验功能、快照功能、写入时复制功能、就地执行功能、逻辑卷管理功能等很多现代磁盘系统所具备的功能,也不能动态调整文件块大小。这些功能的加入并不容易。]

    ... 这些也只有 ZFS,btrfs 才具有好吗...
    Totato5749
        6
    Totato5749  
       2017-06-02 16:55:55 +08:00
    macOS 上 APFS 遥遥无期
    Oamin
        7
    Oamin  
       2017-06-02 17:01:15 +08:00
    iOS 已经换 APFS 了,就等 macOS 了。
    WheatField
        8
    WheatField  
       2017-06-02 17:02:29 +08:00 via iPhone
    乔布斯曾说,计算机根本不需要文件系统
    goodryb
        9
    goodryb  
       2017-06-02 17:04:02 +08:00
    https://zh.wikipedia.org/wiki/HFS%2B HFS+ 1998 年发布的
    https://zh.wikipedia.org/wiki/Windows_XP Windows_XP 2001 年发布的

    批判之前,先好好了解历史
    Kilerd
        10
    Kilerd  
       2017-06-02 17:09:24 +08:00
    @likuku btrfs 这个大坑。
    Felldeadbird
        11
    Felldeadbird  
       2017-06-02 17:09:33 +08:00
    用了 3 年多 MAC OS,没遇到过系统崩溃。也就试过一次为了解决环境问题,重新安装系统。
    we000
        12
    we000  
       2017-06-02 17:10:49 +08:00
    @QAPTEAWH 哪个 NTFS 没有?

    HFS+太落后于时代了, 全局锁和不支持稀疏文件简直渣渣.

    @goodryb 但是别家都知道升级 FS 是不, HFS+落后不是大问题, 落后到 2017 年就是大问题.

    HFS+和 XCode 之于 Apple, 国足之于中国, 都是脑残粉也不得不吐槽的点...
    porrat
        13
    porrat  
    OP
       2017-06-02 17:11:38 +08:00
    还有 Mac 和 iOS 至今不支持增量更新,坑爹
    milugt
        14
    milugt  
       2017-06-02 17:12:20 +08:00 via iPhone
    所以你承认自己是脑残了?周末了刷一波存在感是吧
    UnknownR
        15
    UnknownR  
       2017-06-02 17:12:29 +08:00
    楼主你猜一下带这些功能的 ReFS 格式是几几年发布的,HFS+又是几几年发布的
    honeycomb
        16
    honeycomb  
       2017-06-02 17:14:09 +08:00 via Android
    @likuku
    古老的 NTFS 至少有元数据校验
    honeycomb
        17
    honeycomb  
       2017-06-02 17:14:54 +08:00 via Android
    @we000 而且 apfs 会在短期内替代 hfs+
    we000
        18
    we000  
       2017-06-02 17:18:42 +08:00
    @honeycomb 日也盼夜也盼
    shoaly
        19
    shoaly  
       2017-06-02 17:22:52 +08:00
    减少对 apple 的期待之后, 回归正常. 就发现这事很正常了
    goodryb
        20
    goodryb  
       2017-06-02 17:24:43 +08:00
    @we000 #12

    为什么落后到 2017 年就是大问题,用 Mac 也有两三年了,没遇到过文件系统相关的问题。作为一个 98 年发布的文件系统,难道要预测 20 年后的需求? APFS 也应在 iOS 上使用了,MacOS 也许过不了多久就能用上,

    另外,你所说的“别家都知道升级 FS ”,请看下面的

    https://zh.wikipedia.org/wiki/NTFS#.E7.89.88.E6.9C.AC
    微软正式发布的 NTFS 版本有五个:
    v1.0,随 Windows NT 3.1 在 1993 年中旬发布[4]。v1.0 和 v1.1 和之后的所有版本不兼容。也即使用 NT 3.5x 写入的卷无法被 NT 3.1 读取。该问题的一个解决方案是使用 NT 3.5x 光盘更新 NT 3.1,并添加对 FAT 系统的长文件名支持。[6]
    v1.1,随 Windows NT 3.5 于 1994 年秋季发布。
    v1.2,随 Windows NT 3.51 于 1995 年中旬发布。支持压缩文件、命名流、基于 ACL (访问控制列表)的安全性等功能。[1]
    v3.0,随 Windows 2000 发布。支持磁盘限额、加密、稀疏文件、重解析点[来源请求],更新序列数( USN )日志、$Extend 文件夹(及其中的文件),并改进安全描述符设计方案,允许使用同样的安全设置的多个文件共享一个安全描述符。[1]
    v3.1 随 Windows XP 于 2001 年秋季发布,而后也用于 Windows Vista 和 Windows 7。在 MFT 中提供冗余 MFT 记录数扩展项,可用于恢复受损的 MFT 文件。
    不应将 NTFS.sys 文件版本(如 Windows 2000 中的 v5.0 )和 NTFS 磁盘格式版本(如 Windows XP 开始的 v3.1 )相混淆。[7]
    后续的 Windows 的版本更新增加了许多文件系统相关的功能,但并没有改变 NTFS 本身。例如 Windows Vista 增加了 NTFS 符号链接、事务 NTFS、磁盘收缩和自我修复,但除了符号链接外其他功能其实都由操作系统实现。
    goodryb
        21
    goodryb  
       2017-06-02 17:26:46 +08:00
    @we000 上面少 @楼主了,第 2、3 段忽略
    sobigfish
        22
    sobigfish  
       2017-06-02 17:32:05 +08:00
    我就想知道 磁盘高度文件碎片是不是 NTFS FAT 独有的
    we000
        23
    we000  
       2017-06-02 17:35:47 +08:00
    @goodryb 问题就是慢啊, iPhone 改用 APFS 简直就是喜大普奔. 这么老的系统一直等到 2017 年才升级实在是说不过去. 事实上, HFS+发布的时候就是落后于时代的...

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

    @ayang23
    这是可以发生的,但是你应该尝试用 diskgenius 之类的工具修复一下不是么
    nicevar
        29
    nicevar  
       2017-06-02 19:00:37 +08:00
    这是该更新换代了,用 mac 一定得用 time machine 时不时备份,文件系统挂掉几率还是有的,有时候系统升级就会导致,还有时候莫名其妙 volume 就不能挂载了
    327beckham
        30
    327beckham  
       2017-06-02 20:01:16 +08:00
    我就想了解一下,macOS 的文件系统的过时,对于大家使用 macOS 系统,有没有带来什么样的负面影响?我个人,用了 8 年 mac 系统的程序员,目前还没有遇到文件系统的坑。
    billlee
        31
    billlee  
       2017-06-02 20:12:38 +08:00
    @likuku #5 XFS 还是有元数据校验的
    ItzhacLea
        32
    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
        33
    ItzhacLea  
       2017-06-02 22:29:31 +08:00
    lydasia
        34
    lydasia  
       2017-06-02 22:49:06 +08:00 via iPhone
    你也不看看 hfs+是什么年代的东西了。你看看 fat32 对大文件的支持和 exfat 的坑爹可靠性吧。
    sinxccc
        35
    sinxccc  
       2017-06-02 22:55:06 +08:00
    @327beckham 最直观的问题就是无处不在的 .DS_Store 文件了。
    levn
        36
    levn  
       2017-06-02 22:57:16 +08:00
    当初企图换 zfs 没换成而已……
    sinxccc
        37
    sinxccc  
       2017-06-02 22:57:20 +08:00
    至于 Time machine 本身是个不错的备份方案,跟 HFS+ 的稳定性没什么大关系吧。即使后面有了新文件系统,TM 还是会继续存在,而且在效率和空间利用上应该会有提高。
    daimao
        38
    daimao  
       2017-06-02 22:59:53 +08:00
    哪家公司没有历史包袱
    ayang23
        39
    ayang23  
       2017-06-02 23:08:27 +08:00
    @honeycomb 可以找到文件,但目录结构就没了
    honeycomb
        40
    honeycomb  
       2017-06-02 23:16:53 +08:00
    @ayang23 我几个小时前也遇到了类似的问题
    swsh007
        41
    swsh007  
       2017-06-02 23:18:19 +08:00 via Android
    fat 还能用,而像小米这种到现在也不支持在 tf 卡上支持 ext4.
    ayang23
        42
    ayang23  
       2017-06-03 00:03:13 +08:00
    @honeycomb 那只能说同喜了。我用 photorec 恢复了所有的文件,但太杂乱。准备编个程序通过 exif 的 camera model 信息来找到我丢失的图片。
    msg7086
        43
    msg7086  
       2017-06-03 00:12:03 +08:00
    @ayang23 只要数据没有写完,断电百分百会丢数据。
    文件系统抗断电不是说数据没写完断电还能神奇地找回数据来,而是说突然断电不会导致文件系统本身爆炸。
    ayang23
        44
    ayang23  
       2017-06-03 00:42:24 +08:00
    @msg7086 恩,我这文件系统已经出错了,目录丢了。

    @honeycomb 最新消息,目录找回来了。方法是在 windows10 下加载移动硬盘,就会看到丢失的目录,但不能打开,弹出一个对话框说有错,然后我用系统自带的磁盘修复工具扫描了不到一分钟就修好了。所有文件都在!你可以一试。

    总结:1. NTFS 确实牛逼,2. linux 下的 ntfs 工具和驱动可能都和 windows 下的有差距。
    Valyrian
        45
    Valyrian  
       2017-06-03 00:43:35 +08:00 via iPhone
    @sinxccc 那个文件和文件系统没有关系好吧
    winglight2016
        46
    winglight2016  
       2017-06-03 13:44:55 +08:00
    macOS 作为桌面电脑使用非常稳定,我有两个 mac,一个五年,一个三年半,都没有碰到过文件系统的错误,相对 windows 已经超出预期了。至于是否升级 HFS+,全新替换难度太高,容易出问题,只能一点点升级比较稳妥。服务器还是用 linux 比较靠谱,我从来没考虑过使用 macOS 作为服务器,估计苹果也没有。
    cnZary
        47
    cnZary  
       2017-06-03 15:46:59 +08:00
    @winglight2016 Apple:不然你以为我做 macOS server 是为了什么.......
    uyhyygyug1234
        48
    uyhyygyug1234  
       2017-06-03 21:41:29 +08:00
    时间精度是 1 秒~
    kojirou
        49
    kojirou  
       2017-06-03 22:39:07 +08:00
    win10 的文件剪切在断电时才是真的会丢数据
    ecloud
        50
    ecloud  
       2017-06-04 03:53:15 +08:00
    谁知道当年 zfs 下马的内幕原因究竟是什么?
    likuku
        51
    likuku  
       2017-06-05 10:49:19 +08:00
    @ecloud 授权不兼容是最大可能...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1284 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:30 · PVG 07:30 · LAX 16:30 · JFK 19:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.