Eu encontrei como fazer isso. A seguinte linha no relatório inteligente determina o LBA:
40 51 08 00 40 37 e6 Error: UNC 8 sectors at LBA = 0x06374000 = 104284160
Então, é 104284160. Se sabemos disso, também sabemos qual partição está envolvida:
root:~# fdisk -lu /dev/sda Device Boot Start End Blocks Id System ... /dev/sda3 99610624 1466798079 683593728 83 Linux
Para determinar exatamente onde está a 3ª partição:
104284160 - 99610624 = 4673536
Também precisamos saber o tamanho do bloco:
# tune2fs -l /dev/mapper/crypt_data | grep Block Block count: 170897920 Block size: 4096 Blocks per group: 32768
E agora podemos determinar qual Bloqueio de sistema de arquivos contém esse LBA usando a seguinte fórmula:
b = (int)((L-S)*512/B) where: b = File System block number B = File system block size in bytes L = LBA of bad sector S = Starting sector of partition as shown by fdisk -lu and (int) denotes the integer part.
No meu caso, isso seria:
b = (int)((104284160-99610624)*512/4096 b=584192
Agora temos que verificar se há um arquivo lá:
# debugfs debugfs 1.42.8 (20-Jun-2013) debugfs: open /dev/mapper/crypt_data debugfs: testb 584192 Block 584192 marked in use debugfs: icheck 584192 Block Inode number 584192 37486656 debugfs: ncheck 37486656 Inode Pathname 37486656 /some/file
E é basicamente isso. Agora tenho que realocar manualmente o setor. Mais informações sobre como fazer isso, você pode encontrar aqui .