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

关于 iOS17.5 意外恢复照片的一点猜想

  •  
  •   412999826 · 13 天前 · 1503 次点击
    首先,说一下 iOS 的"照片 APP"的机制(因为经历了太多 iOS 更新,我的叙述可能会有偏差)
    iOS 存储照片会有两部分,原始文件和数据库文件。

    第一部分:原始文件
    照片原始文件在 "DCIM/1**APPLE" 文件夹下
    (根据照片数量,"1**APPLE"文件夹可能会有若干个,暂不清楚是按照什么规则产生的文件夹,但是一旦产生了新文件夹,比如 101APPLE ,那么新的照片就都会在"101APPLE","100APPLE"的照片文件就不会增加)

    第二部分:数据库文件
    照片的数据库文件在 "PhotoData" 文件夹下,由"Photos.sqlite"、"Photos.sqlite-shm"、"Photos.sqlite-wal"记录。

    如果直接将照片文件,上传至 "DCIM/1**APPLE" 文件夹下,那么虽然手机上存有原始文件,但是在"照片 APP"中依然不会显示。



    接着,说一些远古的回忆,如果有印象的可能都用了 iOS 十年以上了。
    在很早以前的 iOS 系统中,因为也没有 iCloud 和隔空投送的存在,想要导入照片是一件比较困难的事,一两张照片可以通过发到微信/QQ ,然后保存到手机,但是多了就很麻烦;如果通过 iTunes 进行同步,在手机上又无法删除。

    于是就有了一些“奇技淫巧”,即把照片通过各种手机助手(如 PP 助手、91 助手)直接导入到 "DCIM/1**APPLE" 文件夹下,接着删除"Photos.sqlite"、"Photos.sqlite-shm"、"Photos.sqlite-wal",强制让手机重建照片数据库。

    后来,随着这些助手的内卷,有了更加亲民的方式,就是安装助手的手机 APP ,然后连上电脑后,电脑端助手会把照片传到手机端助手,手机端助手在导入到"照片 APP"(原理其实类似微信,就是简化了操作过程);再到后来,随着 AirDrop 、iCloud 的普及,导入照片也就慢慢的变的不是什么困难的问题了。




    最后,来说结论吧,我认为这是一个历史遗留问题,本次遇到 bug 恢复之前照片的用户,可能是之前系统中照片数据库出现 bug ,导致删除照片后,仅仅清除了"Photos.sqlite"、"Photos.sqlite-shm"、"Photos.sqlite-wal"的记录,但是照片源文件还在,而 iOS17.5 可能重建了照片库索引,于是导致之前被删除的照片重新出现。


    综上,我认为本次的问题和"iCloud 照片"关系不大,主要应该是本地文件和备份的问题;之所以有部分用户遇到了抹掉过手机依然恢复了照片,我的推测是这些客户使用过 iCloud 云备份或电脑的备份,因为这个备份是全局备份,如果之前备份的时候就存在未被彻底删除的照片数据,那么还原备份后上述文件也会重新还原到手机。
    9 条回复    2024-05-22 11:40:30 +08:00
    inorobot
        1
    inorobot  
       13 天前
    我感觉可能是照片流、图片库、iCloud 图库备份这几个串了,iOS 17.5 可能修改了相关索引逻辑或者缓存逻辑或者云端和本地的同步、删除逻辑,扫到了新的或者没删掉的图片。
    因为新出现的照片都在最近添加里,应该是 iOS 更新之后照片 app 突然搜到了几张新照片再上传到 iCloud 图库了。
    我是出现了几张 22 年已删除的老照片,没有 EXIF 信息,设备还是去年的 15 Pro Max ,新设备启用是全量备份,忘了是 iCloud 里恢复出来的还是直接旧机导入的。
    验证的话也很简单,再找个新机器从 iCloud 里备份恢复,然后升级到 17.5 ,肯定还能复现,当然如果是 iCloud 假删除,那真的很顶了。
    412999826
        2
    412999826  
    OP
       13 天前
    @inorobot 我也大概是这个感觉,就是照片的数据库出现问题("Photos.sqlite"、"Photos.sqlite-shm"、"Photos.sqlite-wal"),正常情况应该是删除源文件,并且删除数据库中的信息,但是结果并没有删除源文件。

    然后全盘还原备份之后(还原方式包括电脑还原,或 iCloud 还原),这些没被删除的源文件还在,然后就被重新添加了。

    我觉得不太会是 iCloud 照片的原因,是因为 iCloud 照片如果出现问题,应该影响全部的设备
    SkywalkerJi
        3
    SkywalkerJi  
       12 天前
    @412999826 #2
    数据库出现问题是不可以删源文件的。苹果这套逻辑是继承的相机的国际标准,所有相机都是这样的。

    包括你说的 DCIM/101APPLE 这个文件夹,APPLE 也是注册来的,每个相机品牌有个唯一的单词,避免 sd 卡混用的时候塞到别家的文件夹里。然后有 101 的话,100 也不是一定不会增加,正常情况下,100 可以塞 1000 张(反正 sony 应该是 1k ),但是如果存储时候发生一些意外,系统会优先保护照片尽可能写入,旧目录有问题的情况下直接另起,因为保护照片是最优先的。

    因为相机的工况更恶劣一些,上山下海低温高温,数据库文件损坏是家常便饭。所以数据库文件是不可信的,唯一可信的只有源文件(源文件读不到的情况下,会显示占位符)。

    但是苹果这套逻辑自己又魔改了下,奇葩点在于:用户没法手动修复数据库或者强制重建数据库。用户删除照片,竟然是假删除。
    ryansvn
        4
    ryansvn  
       12 天前
    iPhone 的照片真的是服了,把照片全部删除,而且清空最近删除,依然占用大量空间,我的有十几个 G ,我甚至有朋友全部删完还占据 35G 。
    ps:照片会定期备份 google 相册、群晖、自己的电脑,所以手机很少存。
    yanhuamiluan
        5
    yanhuamiluan  
       12 天前
    都 17 了连个照片都搞不定
    412999826
        6
    412999826  
    OP
       12 天前   ❤️ 1
    @SkywalkerJi 就我之前的使用经验,正常情况下,删除照片就是 DCIM 里面的源文件也会删除,但是我遇到过出现 bug 的,就是明明有照片不显示(其实这个就类似,只清理了数据库,但是源文件没删除)

    然后清除掉 "Photos.sqlite"、"Photos.sqlite-shm"、"Photos.sqlite-wal"三个文件,重启重建数据库,就能恢复显示
    Jirajine
        7
    Jirajine  
       12 天前
    @SkywalkerJi 是不是假删除你只需要:删除之后空间是否得到释放?释放的空间是否可以直接用来存储新的数据?
    满足这两条就不是“假删除”,如果有疑问,参考 unlink 和 free 的行为。
    neptuno
        8
    neptuno  
       12 天前 via iPhone
    所以这就是“系统数据”越来越大的原因吗😄
    nt0p
        9
    nt0p  
       12 天前
    Apple Releases tvOS 17.5.1 to Fix Photos Corruption Bug Causing Deleted Images to Reappear
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5235 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:15 · PVG 17:15 · LAX 02:15 · JFK 05:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.