系统
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快照。我怀疑这是造成这种混乱的根本原因。
问题
- 有没有办法解决这个问题(没有重新格式化和从备份恢复)?
- 什么是未来避免这种情况的最佳方法(特别是关于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.