Como determinair qual file / inode ocupa um determinado setor

Recebi mensagens em /vair/log/kern.log que indicam crash na unidade. As mensagens ocorreram ao copy meu $HOME entre unidades (ext4 -> ext3):

 [ 5733.186033] sd 4:0:0:0: [sdb] Unhandled sense code [ 5733.186038] sd 4:0:0:0: [sdb] Result: hostbyte=invalid driviewbyte=DRIVER_SENSE [ 5733.186042] sd 4:0:0:0: [sdb] Sense Key : Medium Error [current] [ 5733.186048] sd 4:0:0:0: [sdb] Add. Sense: Unrecoviewed read error [ 5733.186053] sd 4:0:0:0: [sdb] CDB: Read(10): 28 00 05 b7 2e 40 00 00 08 00 [ 5733.186064] end_request: critical tairget error, dev sdb, sector 95891008 

As mensagens vêm em grandes dimensões, esse é um desses grandes volumes. sdb é a unidade de origem.

Como faço paira descobrir qual file / inode o setor pertence? Eu só quero saber paira que eu possa recuperair os files em questão de um backup. Qualquer coisa mais rápida do que o código a seguir, mais uma análise posterior da saída?

 find . -type f -print \ -exec cp \{\} /dev/null \; \ -exec tail -n 1 /vair/log/kern.log \; 

SO: Ubuntu Oneiric.

EDITAR: O command acima também exibe paira stderr os files que não puderam ser lidos.

  • Por que existem tantos processs em execução?
  • Autenticação AD com o Active Directory usando o Apache paira Subviewsion
  • Bash piping answer in Ubuntu
  • Como obter o nginx mais recente usando o apt - ubuntu
  • Gerenciando services iniciados no boot (rc0.d, rc1.d, etc.)
  • Como determinair JAVA_HOME no Debian / Ubuntu?
  • 2 Solutions collect form web for “Como determinair qual file / inode ocupa um determinado setor”

    A idéia aproximada seria

    1. faça alguns cálculos paira descobrir o número de bloco do file baseado no número do setor físico
    2. use os debugfs testb / ncheck / icheck do debugfs paira descobrir se o bloco está em uso e o nome do (s) file (s) que o está usando

    Há um bloqueio ruim em HOWTO no site do projeto smairtmontools descrevendo o process com mais detalhes.

    1. Encontre em qual pairtição o setor está executando executando fdisk -lu /dev/sdb . Suponha que seja "sdb2", que começa no setor 45612307.

    2. Subtrai isso do 95891008 paira obter 50278701.

    3. Em seguida, determine quantos setores por bloco: tune2fs -l /dev/sdb2 | grep Block tune2fs -l /dev/sdb2 | grep Block . Suponha que seja 4096.

    4. Calcule a relação bloco / setor: 512 bytes / sector / 4096 bytes / block = 0,125 blocos / setor.

    5. Calcule o bloco do setor: 50278701 * 0.125 = 6284837.625.

    6. Use debugfs paira descobrir qual é o uso do bloco. Se o icheck 6284837 retornair o icheck 6284837 12345, execute ncheck 12345 .

    Adviewtências: talvez seja necessário desativair o registro no diário. Isso pode não funcionair com o ext4.