Inode incorreto: f2fs corrompido, fsck.f2fs não pode reparar

2

Uma partição f2fs no meu telefone Android foi corrompida recentemente. Ainda montará bem; no entanto, perdi completamente o acesso a um diretório ( /data/media/0 ), que agora aparece como vazio. No entanto, o espaço em disco não mudou em nada.

Ao executar fsck.f2fs do terminal, ele se recusa a verificar um sistema de arquivos montado. Não consigo desmontar a partição de dados ou remontá-la como somente leitura. Bem. Após a reinicialização no modo de recuperação, onde a partição não está montada, recebo isso ao executar 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

Por isso, ele ainda se recusa a me ajudar e agora falha com um erro obscuro ... stat ing o diretório me dá:

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

O inode (número?) parecia ser bem baixo ... Então eu verifiquei outros diretórios:

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

Parece que o diretório pai ( /data/media ) tem inode 4078, outro filho do pai ( /data/media/obb ) tem inode 4080. Então, logicamente, /data/media/0 deve ter inode 4079, mas stat me diz tem inode 4.

Portanto, parece que os metadados do sistema de arquivos foram corrompidos. Sem a ajuda de fsck.f2fs e debugfs (que infelizmente não existe para f2fs), e em um ambiente Linux minimalista (recuperação Android), existe uma maneira de corrigir o número de inode ou algo mais que eu possa fazer para recuperar o acesso aos meus dados?

Curiosamente, o diretório ainda parece estar ocupando espaço em disco e é considerado "não vazio", portanto não posso removê-lo.

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

IMPORTANTE: não posso mais testar soluções, pois preciso do telefone e do espaço de armazenamento e reformatei a partição.

    
por Léo Lam 05.04.2016 / 21:51

0 respostas