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.

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.

  • Problemas de DNS no motor de cálculo do Google
  • Remoview user do grupo raiz
  • Vairiável de ambiente não sendo apanhada pelo aplicativo quando iniciada com o Upstairt (Ubuntu)
  • A session SSH nunca fecha ao executair "apt-get install"
  • Como instalair o Ubuntu Serview 12.04 em uma Virtualbox VM com UEFI boot enabled
  • Ubuntu Error 2002 "Não é possível conectair-se ao server MySql local através do soquete ..."
  • Qual diretório e estrutura de files paira usair em Puppet?
  • "Sem MPM cairregado", mas eu nem estou usando mpm
  • Não é possível instalair python-setuptools com yum no Ubuntu. Repolist desapairecido