Léo*_*Lam 6 linux filesystems data-recovery android f2fs
我的 Android 手机上的 f2fs 分区最近已损坏。它仍然可以正常安装;但是,我完全失去了对一个目录 ( /data/media/0
) 的访问权限,该目录现在显示为空。然而磁盘空间根本没有改变。
fsck.f2fs
从终端运行时,它拒绝检查已安装的文件系统。我无法卸载数据分区或将其重新挂载为只读。美好的。在恢复模式下重新启动后,分区未安装,我在运行时得到这个fsck.f2fs
:
~ # fsck.f2fs /dev/block/mmcblk0p39
Info: sector size = 512
Info: total sectors = 21425920 (in 512bytes)
Assertion failed!
[fsck_chk_dentry_blk: 563] le32_to_cpu(de_blk->dentry[i].hash_code) == hash_code
Run Code Online (Sandbox Code Playgroud)
所以它仍然拒绝帮助我,它现在失败并出现一个模糊的错误......stat
目录给了我:
root@victara:/ # stat /data/media/0
File: `/data/media/0'
Size: 4096 Blocks: 24 IO Blocks: 4096 directory
Device: 10307h/66311d Inode: 4 Links: 35
Access: (770/drwxrwx---) Uid: (1023/media_rw) Gid: (1023/media_rw)
Access: 2016-04-04 16:55:56.800148001
Modify: 2016-04-05 02:47:44.314999998
Change: 2016-04-05 02:47:44.314999998
Run Code Online (Sandbox Code Playgroud)
inode(数量?)似乎很低……所以我检查了其他目录:
root@victara:/ # stat /data/media/
File: '/data/media/'
Size: 4096 Blocks: 16 IO Block: 4096 directory
Device: 10307h/66311d Inode: 4078 Links: 4
Access: (0770/drwxrwx---) Uid: ( 1023/media_rw) Gid: ( 1023/media_rw)
__bionic_open_tzdata: couldn't find any tzdata when looking for localtime!
__bionic_open_tzdata: couldn't find any tzdata when looking for GMT!
__bionic_open_tzdata: couldn't find any tzdata when looking for posixrules!
Access: 2016-04-04 14:48:25.000000000
Modify: 1970-01-01 02:27:21.000000000
Change: 1970-02-07 02:30:36.000000000
root@victara:/ # stat /data/media/obb
File: `/data/media/obb'
Size: 4096 Blocks: 16 IO Blocks: 4096 directory
Device: 10307h/66311d Inode: 4080 Links: 3
Access: (775/drwxrwxr-x) Uid: (1023/media_rw) Gid: (1023/media_rw)
Access: 1970-01-01 03:27:21.519999999
Modify: 2016-03-17 22:38:30.505748550
Change: 2016-04-04 17:42:31.569999988
Run Code Online (Sandbox Code Playgroud)
看起来父目录 ( /data/media
) 具有 inode 4078,父目录 ( ) 的另一个子/data/media/obb
节点具有 inode 4080。因此,从逻辑上讲,/data/media/0
应该具有 inode 4079,但stat
告诉我它具有 inode 4。
所以看起来文件系统元数据已损坏。如果没有帮助,fsck.f2fs
和debugfs
(这可悲的是不为f2fs存在),并在一个非常最小的Linux环境(Android的恢复),是有办法,我可以纠正的inode编号或其他东西我可以做恢复访问我的数据?
有趣的是,该目录似乎仍在占用磁盘空间,它被视为“非空”,因此我无法将其删除。
root@victara:/data/media # rm -rf 0
rm: 0: Directory not empty
1|root@victara:/data/media # ls
0 obb
root@victara:/data/media # ls -al 0
total 0
Run Code Online (Sandbox Code Playgroud)
重要提示:我无法再测试解决方案,因为我需要手机和存储空间并重新格式化分区。
Assertion failed!
[fsck_chk_dentry_blk: 563] le32_to_cpu(de_blk->dentry[i].hash_code) == hash_code
Run Code Online (Sandbox Code Playgroud)
“断言失败”意味着程序中的内部错误,在本例中是在fsck.f2fs
. 基本上,这意味着程序员期望始终正确的事情实际上并非如此。
生产级程序应该始终使用比“断言失败”消息更好的消息来处理错误-至少,它应该给出更具描述性的错误消息。有时,“断言失败”错误意味着您遇到了开发人员已经意识到但尚未实施的罕见情况。
在这种情况下,唯一的选择是查看是否有可用的更新版本的程序,并希望它已被更新以以某种明智的方式处理此类情况。如果较新的版本仅以源代码形式从上游开发人员处提供,并且它解决了问题,则可能需要向 Linux 发行版的维护者发送错误报告,表明该发行版应该打包更新版本,或向后移植相关补丁。
如果上游开发人员的最新源代码版本也无法处理此问题,那么绝对是时候向开发人员发送错误报告了。
归档时间: |
|
查看次数: |
3226 次 |
最近记录: |