如何修复无效的地图节点链接?

ken*_*orb 6 osx fsck hfs+

我的驱动器被格式化为 hfs+ 并且不干净。

例如,当我尝试通过 挂载驱动器时mount -f -o rwdmesg显示错误:

hfs: Filesystem was not cleanly unmounted, running fsck.hfsplus is recommended.
mounting read-only.
Run Code Online (Sandbox Code Playgroud)

所以当我试图通过fsck.hfsplus(部分hfsprogs)修复它时,它说:

$ fsck -dyf /media/sdd2
** /dev/sdd2
    Using cacheBlockSize=32K cacheTotalBlock=1024 cacheSize=32768K.
** Checking HFS Plus volume.
** Detected a case-sensitive catalog.
** Checking Extents Overflow file.
** Checking Catalog file.
   Invalid map node linkage
(4, 0)
** Volume check failed.
volume check failed with error 7 
    volume type is pure HFS+ 
    primary MDB is at block 0 0x00 
    alternate MDB is at block 0 0x00 
    primary VHB is at block 2 0x02 
    alternate VHB is at block 3906291630 0xe8d547ae 
    sector size = 512 0x200 
    VolumeObject flags = 0x07 
    total sectors for volume = 3906291632 0xe8d547b0 
    total sectors for embedded volume = 0 0x00 
Run Code Online (Sandbox Code Playgroud)

尽管使用-y-f,驱动器并未得到修复。

这是根据此博客对该错误的解释:

一旦检查了 B*-Tree,fsck 就会继续检查分配映射。fsck 如上所述检查头节点。然后它检查每个节点,确保它将自己标识为地图节点并具有适当数量的记录。如果节点未通过这些检查,fsck 将返回“Invalid Map Node”。然后 fsck 检查以确保节点高度不为 0(“无效节点高度”)。最后,如果它已经到达树的底部并且 mapSize,(它存储树中记录的总数,并且在每次处理一个节点时递减)不为 0,fsck 就知道存在孤立的节点并返回“无效的地图节点链接”。

但是我不知道如何修复该错误,因为它不会自动更正,而且我无法将分区挂载为可写。任何想法如何解决该错误?

PS 磁盘工具也有类似的问题。

ken*_*orb 7

您应该尝试通过为 指定选项来在指定的文件系统(即HFS+)上重建目录文件(B-tree),例如:-rfsck

$ fsck.hfsplus -fryd /dev/sdd2
Run Code Online (Sandbox Code Playgroud)

此选项目前仅在指定文件系统上有足够的连续空间用于新目录文件并且现有目录文件中的叶节点没有损坏时才有效(换句话说,fsck 能够遍历每个目录文件)请求的 btree 中的节点成功)。

当然,如果您不想冒进一步破坏任何数据的风险,请在执行任何磁盘操作之前进行备份(整个映像磁盘转储)。

通过运行查看更多信息man fsck.hfsplus

如果这没有帮助,请尝试使用其他一些工具来修复您的磁盘,例如:

  • CGSecurity的TestDisk | Mac、Windows、Linux ( apt-get install testdisk)
  • Alsoft(商业)的DiskWarrior - 可启动磁盘或 Mac 应用程序