私のAndroid携帯電話のf2fsパーティションは最近破損しています。それでも正常にインストールされていますが、/data/media/0
現在空のように見える1つのディレクトリ()にアクセスできません。しかし、ディスク容量はまったく変更されていません。
端末で実行すると、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
だから私はまだ助けを拒否し、今はあいまいなエラーのために失敗します...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
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
/data/media
親ディレクトリ()にはinode 4078があり、親ディレクトリ/data/media/obb
()の他の子ディレクトリにはinode 4080があるようです。したがって、論理的には/data/media/0
inode 4079が必要ですが、stat
inode 4があることを伝えます。
そのため、ファイルシステムのメタデータが破損しているようです。そしてfsck.f2fs
(悲しいことにf2fsは存在しません)の助けを借りずにdebugfs
かなり小さな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
重要:携帯電話とストレージスペースが必要で、パーティションを再フォーマットする必要があるため、ソリューションをテストすることはできません。
答え1
Assertion failed!
[fsck_chk_dentry_blk: 563] le32_to_cpu(de_blk->dentry[i].hash_code) == hash_code
「アサーション失敗」とはプログラムの内部エラーを意味し、この場合、fsck.f2fs
基本的にプログラマが常に true と期待していたことが実際にはそうでなかったことを意味します。
本番レベルのプログラムは常にエラーを処理する必要があります。何「アサーション失敗」メッセージよりも優れています。少なくともより説明的なエラーメッセージを提供する必要があります。時々、「アサーション失敗」エラーは、開発者が知っているがまだ実装していないまれな状況が発生したことを意味します。
この場合、唯一のオプションは、利用可能な最新バージョンのプログラムがあることを確認し、この状況を合理的な方法で処理できるように更新されることです。最新バージョンがアップストリーム開発者のソースコード形式でのみ提供され、問題が解決する場合は、ディストリビューションが更新されたバージョンをパッケージ化する必要があることを示すバグレポートをLinuxディストリビューションマネージャに送信する必要があります。関連パッチ。
アップストリーム開発者の最新のソースコードバージョンでも問題が処理されない場合は、開発者にバグレポートを送信する必要があります。