APFS:Time Machine备份后fsroot树无效 - 将来如何恢复和避免?


6

系统

MacBook Pro,2013年末,1 TB SSD(全新,最近被Apple取代),APFS(无日志,不区分大小写),High Sierra 10.13.2,Time Machine到网络硬盘。

发生了什么

  • Mac停止工作了no space left on device
  • 重启失败。
  • 尝试使用Command-R启动进入恢复模式并从磁盘工具运行急救 - 失败,因为显然恢复系统也驻留在同一磁盘上,这似乎使得APFS上的fsck变得不可能。
  • 试图手动删除一些文件rm,得到no space left on device
  • 试图手动截断一些文件cat /dev/null > somefile,得到no space left on device
  • 使用Shift-Command-R启动进入恢复模式(从Internet下载系统)并再次运行急救。这次成功有限:

    ** Checking volume.
    ** Checking the container superblock.
    ** Checking the EFI jumpstart record.
    ** Checking the space manager.
    ** Checking the object map.
    ** Checking the APFS volume superblock.
    ** Checking the object map.
    error: invalid dstream.size (10730881024), is greater than dstream.alloced_size (71151616)
    error: xf : INO_EXT_TYPE_DSTREAM : invalid dstream
    error: inode_val: object (oid 0x16309a1): invalid xfields
    ** Checking the fsroot tree.
       fsroot tree is invalid.
    ** The volume /dev/rdisk2s1 could not be verified completely.
    

显然fsroot树是无效的。我已经搜索过,但无法找到任何有关如何解决此问题的可行建议(当然,重新格式化和从备份恢复,我想避免)。

其他背景资料

在系统上是一个Parallels Windows VM,带有一个虚拟的100 GB硬盘(是的,一个大文件),最近使用过(因此需要备份)。我最后一次使用计算机时,macOS SSD上仍然可以免费使用大约20 GB。大约一天,Time Machine备份尚未完成,但未显示任何错误消息。当问题发生时,我让机器打开过夜以完成增量的Time Machine备份。这里的连接是,Time Machine显然正在使用APFS快照。我怀疑这是造成这种混乱的根本原因。

问题

  1. 有没有办法解决这个问题(没有重新格式化和从备份恢复)?
  2. 什么是未来避免这种情况的最佳方法(特别是关于Time Machine)?

谢谢。

更新

fsck_apfs使用debug标志运行时-d,输出包含更多信息:

** Checking volume.
** Checking the container superblock.
** Checking the EFI jumpstart record.
** Checking the space manager.
** Checking the object map.
** Checking the APFS volume superblock.
** Checking the object map.
error: invalid dstream.size (10730881024), is greater than dstream.alloced_size (71151616)
error: xf : INO_EXT_TYPE_DSTREAM : invalid dstream
error: inode_val: object (oid 0x16309a1): invalid xfields
obj-id: 23267745 type: Inode      
private-id: 23267745 parent-id: 12896552 cr/mtime: 1515089959653928186/1515090145416398252 
def-prot-class: 0 
uid/gid/mode: 0/0/0x8180 bsd_flags: 0x0 internal_flags: 0x8280 name: NO-NAME
** Checking the fsroot tree.
   fsroot tree is invalid.
** The volume /dev/disk2 could not be verified completely.

你有没有找到解决方案?我在相同大小的Parallels VM磁盘上遇到了同样的错误。Parallels现在还没有开始。
Mike Wills

不幸的是,没有。我不得不从备份中恢复磁盘的内容。
亨德里克

由于localsnapshots和磁盘已满,我遇到了同样的问题。但这不是VM,而是具有本地SSD的真正Mac。但我的fsck报告没有错误。基本上,TimeMachine APFS组合很脆弱。macOS High Sierra。
gctwnl

Answers:


4

我刚遇到类似的问题。可能你会发现问题出现在Parallels VM的一个文件中 - 至少那是我案例的罪魁祸首。你的fsck_apfs -d /disk/<disk>支票寄回:

obj-id: 23267745 type: Inode

如果您已打开终端,则可以使用以下命令使用该inode获取文件(或文件)的路径:

find / -inum 23267745

从那里你可以知道需要恢复哪些文件而不是完全恢复。

在我的情况下,VM文件仅在快照中可用,因为我从TimeMachine中排除了我的VM。我从早期的快照中恢复了该文件,然后我进一步了解了fsck_apfs - 它通过磁盘检查快照,然后在第二个快照中轰炸了同一个文件。幸运的是,快照最多只保留24小时,因此应该在此之后清理。

您的里程可能会有所不同,因为它可能像一个文件一样“简单”或只是冰山一角。


老话题,我知道,但我现在也有同样的情况。此外,我的虚拟机不再启动,无法复制。“从早期快照中恢复该文件”是什么意思?使用Time Machine?或者是其他东西?我还从Time Machine中排除了我的VM。谢谢!
亨利生锈

@HenryRusted对于延迟响应抱歉...似乎APFS获取了可通过tmutil访问的快照(try:tmutil listlocalsnapshots /)。即使我从TimeMachine中排除了VM,但它似乎仍然在快照中被捕获。我不记得我在恢复模式下从终端使用的确切命令,用于从快照恢复文件。
CWoods
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.