Você pode tentar usar dd_rescue
junto com find
com algo como:
# start where you need to rescue things from
cd /place/bad/drive/is/mounted
# create directory structure to try restore to
mkdir -f /path/to/place/to/try/restore/to/
find . -type d -exec mkdir -f /path/to/place/to/try/restore/to/{} \;
# find all files and try rescue them
find . -type f -exec dd_rescue {} /path/to/place/to/try/restore/to/{} \;
Nota: Eu não testei o que precede, portanto, experimente-o em um conjunto de dados pequeno primeiro para garantir que a saída seja a desejada antes de testá-lo em um conjunto de arquivos que pode demorar para ser processado. E certifique-se de que a unidade a ser resgatada esteja montada como somente leitura por causa da paranóia.
Além disso, isso não funcionará bem se a estrutura do diretório for afetada pelas más condições da unidade, pois as etapas find
não serão repetidas em erros como as dd_rescue
partes, então você pode ter para ir com a opção dd_rescue
-o-todo-partição-e-arrancar-arquivos-da-resgatados-imagem-depois, a menos que a estrutura de diretórios seja "segura".