Tenho um dispositivo que está falhando. Usando ddrescue
, recuperei tudo, exceto cerca de 500 KB em 83 regiões. O arquivo de mapa me informa o deslocamento bruto e o comprimento de cada região perdida. Quero descobrir quais arquivos são afetados. Como posso obter uma lista de deslocamentos de setor físico associados a um arquivo em um volume exFAT?
Acabei escrevendo meu próprio utilitário. Não consegui localizar nada pré-existente. Ele foi escrito em C# contra .NET 8+ e o código-fonte está aqui:
https://github.com/logiclrd/FindAffectedFilesExfat
Em termos de esforço despendido, acho que há uma maneira melhor de resolver o problema central do que a sugerida no título da pergunta (listar os setores de um volume e tentar determinar a qual arquivo cada um deles pertence). Parece que o problema central é o seguinte:
Se você quiser apenas obter uma lista de arquivos afetados pela falha do dispositivo, não é necessário reunir um mapeamento setor por setor dos locais de arquivos no dispositivo. Como você já tem o conteúdo da unidade com falha imageado para outro dispositivo ou um arquivo de imagem e retém o mapfile produzido por
ddrescue
no processo, você pode usar o modo de preenchimento deddrescue
para marcar todos os setores não recuperados na imagem com alguma string que não aparece em nenhum dos arquivos no disco com falha, então monte a imagem como um sistema de arquivos e execute um simplesgrep -r -l 'your_unique_marker_string'
sobre ela. Isso fornecerá a você uma lista limpa de arquivos danificados e nada mais; já que a busca real por arquivos é feita no nível do sistema de arquivos, quaisquer setores não recuperados que não correspondem a nenhum arquivo são convenientemente ignorados sem nenhum esforço de sua parte.Para invocar
ddrescue
neste modo, você faria assim:onde
marker_string.txt
está o arquivo contendo a string exclusiva com a qual você quer preencher os setores não recuperados. Note que você não pode especificar a string diretamente na linha de comando.A
--fill-mode
opção pega o(s) caractere(s) de status dos setores a serem preenchidos como argumento, conforme apresentado no mapfile. Se o mapfile contiver blocos com status diferentes de+
(leitura bem-sucedida) e-
(setores defeituosos conhecidos), você vai querer adicioná-los à lista do modo de preenchimento (não o,+
é claro!).A letra
l
no argumento da--fill-mode
opção produz dados de localização (número do setor) no início de cada setor marcado. É opcional, mas há pouca razão para omiti-lo; você pode, por exemplo, usar os dados de localização para construir um mapfile de domínio para restringir futuras tentativas de resgate a setores contendo dados de arquivo, o que pode ser útil se a unidade com falha tiver muito espaço não utilizado agora se apresentando como setores defeituosos.Eu achei esse método muito eficaz e o usei em várias ocasiões com bons resultados. Ele tem a vantagem significativa de ser independente do sistema de arquivos usado. Ele depende do sistema de arquivos estar saudável o suficiente para poder ser montado (ou seja, que estruturas suficientes do sistema de arquivos tenham sido resgatadas); minha experiência é com NTFS e descobri que o nativo do Windows
CHKDSK
é bastante eficaz em repará-lo em uma condição montável. Eu esperaria o mesmo resultado de qualquer sistema de arquivos de journaling moderno e suas ferramentas de reparo nativas.