無効なinode:f2fsが破損しています。 fsck.f2fsを修復できません。

無効なinode:f2fsが破損しています。 fsck.f2fsを修復できません。

私の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/0inode 4079が必要ですが、statinode 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ディストリビューションマネージャに送信する必要があります。関連パッチ。

アップストリーム開発者の最新のソースコードバージョンでも問題が処理されない場合は、開発者にバグレポートを送信する必要があります。

関連情報