• 请不要在回答技术问题时复制粘贴 AI 生成的内容
porrat
V2EX  ›  程序员

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

  •  
  •   porrat · Jun 2, 2017 · 14715 views
    This topic created in 3445 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

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

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

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

    HFS+和 XCode 之于 Apple, 国足之于中国, 都是脑残粉也不得不吐槽的点...
    porrat
    porrat
    OP
    Jun 2, 2017
    13
    还有 Mac 和 iOS 至今不支持增量更新,坑爹
    milugt
    milugt
    Jun 2, 2017 via iPhone
    14
    所以你承认自己是脑残了?周末了刷一波存在感是吧
    UnknownR
    UnknownR
    Jun 2, 2017
    15
    楼主你猜一下带这些功能的 ReFS 格式是几几年发布的,HFS+又是几几年发布的
    honeycomb
    honeycomb
    Jun 2, 2017 via Android
    16
    @likuku
    古老的 NTFS 至少有元数据校验
    honeycomb
    honeycomb
    Jun 2, 2017 via Android
    17
    @we000 而且 apfs 会在短期内替代 hfs+
    we000
    we000
    Jun 2, 2017
    18
    @honeycomb 日也盼夜也盼
    shoaly
    shoaly
    Jun 2, 2017
    19
    减少对 apple 的期待之后, 回归正常. 就发现这事很正常了
    goodryb
    goodryb
    Jun 2, 2017
    20
    @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
    goodryb
    Jun 2, 2017
    21
    @we000 上面少 @楼主了,第 2、3 段忽略
    run2
    run2
    Jun 2, 2017
    22
    我就想知道 磁盘高度文件碎片是不是 NTFS FAT 独有的
    we000
    we000
    Jun 2, 2017
    23
    @goodryb 问题就是慢啊, iPhone 改用 APFS 简直就是喜大普奔. 这么老的系统一直等到 2017 年才升级实在是说不过去. 事实上, HFS+发布的时候就是落后于时代的...

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

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

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

    总结:1. NTFS 确实牛逼,2. linux 下的 ntfs 工具和驱动可能都和 windows 下的有差距。
    Valyrian
    Valyrian
    Jun 3, 2017 via iPhone
    45
    @sinxccc 那个文件和文件系统没有关系好吧
    winglight2016
    winglight2016
    Jun 3, 2017
    46
    macOS 作为桌面电脑使用非常稳定,我有两个 mac,一个五年,一个三年半,都没有碰到过文件系统的错误,相对 windows 已经超出预期了。至于是否升级 HFS+,全新替换难度太高,容易出问题,只能一点点升级比较稳妥。服务器还是用 linux 比较靠谱,我从来没考虑过使用 macOS 作为服务器,估计苹果也没有。
    cnZary
    cnZary
    Jun 3, 2017
    47
    @winglight2016 Apple:不然你以为我做 macOS server 是为了什么.......
    uyhyygyug1234
    uyhyygyug1234
    Jun 3, 2017
    48
    时间精度是 1 秒~
    kojirou
    kojirou
    Jun 3, 2017
    49
    win10 的文件剪切在断电时才是真的会丢数据
    ecloud
    ecloud
    Jun 4, 2017
    50
    谁知道当年 zfs 下马的内幕原因究竟是什么?
    likuku
    likuku
    Jun 5, 2017
    51
    @ecloud 授权不兼容是最大可能...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1523 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 1088ms · UTC 07:08 · PVG 15:08 · LAX 23:08 · JFK 02:08
    ♥ Do have faith in what you're doing.