Melhor maneira de copiar todos os arquivos, ignorando erros?


36

Eu tenho um HD parcialmente corrompido que não pode ser reparado pelo Disk Utility, mas que pode ser montado somente leitura, tornando os dados nele acessíveis.

Estou tentando copiar todo o conteúdo recuperável em um HD sobressalente, mas todo método que tento falha quando um erro é encontrado - deixando os arquivos restantes sem cópia.

Localizador - falha. SuperDuper - falha. O mesmo (comando do terminal) - falha.

Eu esperava que o Ditto fizesse o truque, a página de manual do Ditto diz:

idem retorna 0 se tudo for copiado, caso contrário diferente de zero. idem quase nunca desiste, preferindo relatar erros ao longo do caminho. As mensagens de diagnóstico serão impressas com erro padrão.

Eu enviei um bug para a Apple, ao não ter o desempenho anunciado.

Alguma outra ideia?


Consulte stackoverflow.com/a/27637277 em vez das --ignore-errorsrespostas abaixo.
spyle

Respostas:


28

Uso cp -Rfv sourcefile destinationfilecom sucesso regularmente.

cp = cópia

R = mantém hierarquias de arquivos

f = se um arquivo de destino existente não puder ser aberto, remova-o e tente novamente

v = modo detalhado, exibe arquivos transferidos à medida que avança

sourcefile = dados que você deseja copiar

destinationfile = diretório / unidade para o qual você deseja copiar


3
Como isso ignora erros na unidade de origem (consulte a pergunta)?
nohillside

1
@patrix Ele não "ignora" os erros, mas o sinalizador "f" os força, copiando apenas os dados intactos. Enquanto você assiste ao progresso (graças ao sinalizador detalhado), você verá a saída ao longo das linhas de "dados não copiados devido a erro de E / S" quando encontrar dados incorretos. Depois que o erro é exibido, ele passa para o próximo arquivo sem nenhuma entrada do usuário. O cenário do pôster soa extremamente semelhante às dezenas de vezes que usei esse comando para recuperar dados de discos / volumes flakey.
Sr. Coelho

Existe uma maneira de copiar um arquivo com falha com algum postfix, para que todos os arquivos ausentes sejam melhor encontrados?

1
No cpmanual do BSD (macOS): "No modo -R, o cp continuará copiando mesmo se forem detectados erros."
Matt

Muito obrigado por isso. Atualmente, estou tentando recuperar o máximo possível de um disco rígido com falha, embora não me importe com dados corrompidos, não vou perder tempo tentando corrigi-lo, mas apenas excluí-lo. Este é um método de trabalho para conseguir isso rapidamente. Estou canalizando os erros em um arquivo de log, que posso analisar posteriormente para excluir os arquivos truncados com erros de leitura, acrescentando o seguinte:2> error.log
0x01

23

Experimente o Gnu ddrescue - é um programa de recuperação de dados que faz cópias baseadas em blocos com recuperação de dados corrompidos durante as operações de cópia. Você pode obtê-lo no OS X se estiver usando o Homebrew digitando em uma janela do Terminal:

brew install ddrescue

Um guia na arstechnica descreve como recuperar um disco com falha usando o ddrescue. Leia o guia, pois ele contém informações úteis. Aqui está uma idéia de como chegar lá.

  • Localize a unidade usando diskutil list. A coluna identificadora é o que você está procurando:

    /dev/disk1
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *750.2 GB   disk1
       1:                        EFI EFI                     209.7 MB   disk1s1
       2:                  Apple_HFS Macintosh HD 2          80.0 GB    disk1s2
       3:                  Apple_HFS Home                    509.1 GB   disk1s3
    
  • Desmonte o disco em questão:

    diskutil unmount /dev/disk1s3    
    
  • Inicie uma operação de resgate do disco em uma imagem. Verifique se a localização de Rescue.dmgé substituída pela localização desejada.

    sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk1s3 Rescue.dmg Rescue.log
    
  • Recupere a imagem em uma nova unidade:

    sudo /usr/local/bin/ddrescue --force -v -c 4096 Rescue.dmg /dev/disk2s0 recovery.log
    

Lembre-se de ler também o manual do ddrescue para se instruir sobre as opções disponíveis executando man ddrescue.


1
Para adicionar ao aviso do moderador: essa pode ser uma resposta muito boa para o problema, mas precisa de mais trabalho. Você pode adicionar alguns exemplos de comandos ddrescue para dispositivos OS X à resposta? Corrigi um pouco com o tipo de plano de fundo e informações que gostamos de ver nas respostas aqui. Se você fizer isso, tenho certeza de que seria uma ótima resposta.
Ian C.

Usei o ddrescue com sucesso há um ou dois anos, para copiar dados de um disco defeituoso. Passou talvez por 200 erros e conseguiu ler cerca de metade deles. O disco copiado resultante foi inserido no gravador de disco e o resultado foi talvez um dano a 10 arquivos em cerca de 1 milhão.
Pittsburgh Mike

7

Eu gosto de usar rsyncpara copiar arquivos de uma fonte corrompida para um destino funcional:

rsync -auv --delete --ignore-errors /path/to/source/ /path/to/destination/

Onde:

-a = "modo de arquivo" = retorna para diretórios, copia links simbólicos como links simbólicos, preserva permissões, horários, grupos e arquivos especiais, preserva também o proprietário (quando o proprietário = raiz) e os dispositivos (quando o proprietário = raiz)

-u= pula o arquivo na fonte se sua cópia correspondente no destino for mais recente

-v = saída detalhada

--delete= arquivos no destino que não existem na fonte serão excluídos

--ignore-errors = exclui um arquivo / diretório em caso de erro de E / S durante o processo de cópia


4

Essa dica da Macworld sugere usar o dd para fazer uma cópia bit a bit (ignorando erros) e montar a imagem resultante no Finder para recuperar seus arquivos. Eu não tentei, mas parece que pode funcionar.


Isso é bom, porque você deseja que seus dados sejam enviados rapidamente se esse disco for duplicado. Dessa forma, você obtém um bloco para cópia em bloco, incluindo erros, que estará disponível para inspeção conforme sua necessidade, sem se preocupar com a possibilidade de o disco morrer peroperadamente antes que você tire tudo dele. Eu executarei uma operação, em um bom começo limpo para terminar sem pular por todo o lugar de fragmento de arquivo para fragmento de arquivo, o que será um trabalho mais difícil na unidade que criou a cópia do DD.
stuffe

3
O ddrescue é melhor do que o dd, pois ele tentará repetidas seções ruins repetidamente enquanto você o deixar em execução - veja a resposta anterior em que o OP desativou seus dados após algumas semanas de trituração (!). Observe que essa é uma boa abordagem se o hardware HD estiver falhando, mas não faz nada para corrigir a corrupção da estrutura de volume - que apenas é copiada junto com os arquivos.
Gordon Davisson

3

Você pode considerar usar o ddcomando para executar uma cópia bloco a bloco do seu disco rígido corrompido para o seu novo disco rígido.

Supondo que seu novo HDD ( /dev/disk2) tenha tamanho igual ou superior ao seu HDD corrompido ( /dev/disk1), você poderá emitir:

dd if=/dev/disk1 of=/dev/disk2 bs=4096 conv=notrunc,noerror

com tamanho de bloco @ 4k, não trunque nenhum bloco de dados, ignore todos os erros

Para encontrar os nomes dos dispositivos, execute mountprimeiro o Terminal.


0

O dittocomando deve funcionar, eu usaria dittoem conjunto com a -vopção verbose para que você possa ver exatamente o que gera um erro do que ele copia.


3
Segundo o autor da pergunta dittonão funciona. Por que você acha que sim?
nohillside

op está perguntando sobre alternativas paraditto
juniorRubyist

0

Você pode tentar executar o SuperDuper e ignorar os arquivos com erros io, se houver apenas alguns e usar o recurso de atualização inteligente, que é uma maneira bastante eficaz de extrair a maioria dos dados. (Eu acho que o comando dd seria preferível se você puder fazer isso).

Passos:

  1. Selecione 'fazer backup de todos os arquivos' como estratégia de backup
  2. Nas opções, selecione 'atualização inteligente' (caso contrário, esse processo levará um tempo ridiculamente longo se você tiver mais de um ou dois erros, precisará da versão paga para isso)
  3. Execute a cópia
  4. Quando a cópia falhar, leia os logs para descobrir qual arquivo falhou ao copiar e pressione ok / close para voltar à tela 'iniciar'
  5. Selecione 'editar script de cópia selecionado' no menu suspenso
  6. Em comandos de script, adicione o arquivo que falhou ao copiar; ele deve dizer 'ignorar' quando for adicionado à lista de arquivos
  7. Salve seu script com algum nome (por exemplo, ignorar arquivos corrompidos)
  8. Selecione seu script e repita as etapas 3 a 7 quantas vezes forem necessárias para ignorar todos os arquivos corrompidos.

-2

Se a sua unidade ainda estiver acessível e você puder ver os arquivos com hirrarquia, mas apenas o processo de cópia for interrompido devido a erros, você poderá usar o Unstoppable Copierprograma.

http://www.roadkil.net/program.php?ProgramID=29


Esse é um programa somente para Windows, e o OP está solicitando soluções para Mac (em um fórum específico para Mac!)
Haydentech
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.