Acidentalmente fez dd / dev / sda

35

Eu escrevi uma imagem ISO no meu disco rígido usando sudo dd if=image.iso of=/dev/sda. Eu quis dizer /dev/sdc, e agora a execução sudo fdisk -lretorna apenas uma partição em / dev / sda enquanto deveria haver 6. É possível recuperar meus dados?

Ainda não desliguei (reinicializei) meu computador.

Vaca Baaing
fonte
24
ddmostrou sua cara feia de 'Destruidor de dados' novamente :-( Ele substituiu o cabeçalho da unidade (correspondente ao tamanho do arquivo iso). Os dados que estavam lá foram perdidos. Você tem um backup recente recente do arquivos que você não pode dar ao luxo de perder? caso contrário, você deve se preparar para o trabalho duro para reparar os sistemas de tabela de partição e arquivo, melhor a cópia clonada usando Testdisk , e se isso falhar, mesmo o trabalho mais difícil de recuperar dados do arquivo a ser encontrado 'por trás' . a parte da unidade que é sobrescrito Você pode usar PhotoRec para o efeito Veja este link, cgsecurity.org.
sudodus
6
Se a unidade gpt é particionada, possui a vantagem de uma tabela de partição de backup no final da unidade. Somente o início da movimentação para o tamanho da ISO foi totalmente substituído e foi perdido. Dependendo do tamanho das partições, você poderá recuperar algumas ou a maioria das outras partições.
precisa
10
@sudodus " ddmostrou sua cara feia de 'Destruidor de Dados' novamente" - Exceto que não tem nada a ver com ddisso, tem a ver com acessar diretamente um dispositivo de disco como root. Qualquer outra ferramenta poderia ter tido o mesmo efeito. cat image.iso > /dev/sdateria exatamente o mesmo efeito. Or pv .... Ou, até certo ponto, até vi /dev/sda. De fato, isso me lembra a história em que Linus Torvalds tentou discar para uma rede usando o dispositivo de disco rígido em vez do modem, substituindo o início de sua unidade com o handshake de discagem . Nada a ver com isso dd.
Marcelm
4
Qual o tamanho exato do seu .isoarquivo? Você interrompeu ddou foi executado até a conclusão?
Marcelm
4
@ marcelm, você está certo. Mas na vida real, as pessoas estão usando ddassim (para esse fim), então eu acho que o aviso 'Data Destroyer' é relevante, embora o aviso completamente correto deva ser mais longo: "Não use uma linha de comando como sudo dd if=image.iso of=/dev/sdxclonar em massa Use uma ferramenta que ajude a identificar e selecionar o dispositivo de destino correto e que tenha um ponto de verificação final, para que você possa verificar novamente se clonará do arquivo iso para o dispositivo de destino correto, por exemplo, StartupDiskCreator, Disks, mkusb , Win32DiskImager. "
sudodus

Respostas:

65

Como o computador ainda está ligado, você tem boas chances de salvar coisas.

Primeiro, sysfsexpõe o kernel na exibição de memória das tabelas de partição. No momento, seu kernel não releu a tabela do disco e se lembra do seu particionamento. Dentro /sys/block/sda/, deve haver um diretório para cada partição. Cada um desses subdiretórios contém um arquivo starte um arquivo size, que representam o local e o tamanho da partição, em setores. Execute fdiske recrie cada partição (em ordem!) Com as informações em seu sysfsdiretório. Observe que você também precisará criar uma nova tabela de partição. Verifique se a sua nova tabela de partição é igual à anterior. Você pode verificar isso /sys/block/sda. Se você vir sda1atésda7enquanto você tem apenas 6 partições, provavelmente possui MBR; caso contrário, provavelmente é GPT. Você também precisa definir sinalizadores e tipos para essas partições. Veja /etc/fstabe tente coletar informações sobre os tipos de partições que você possui, depois consulte a Wikipedia para convertê-las em códigos para o seu esquema de particionamento.

Como você parece poder usar seu sistema de arquivos, é provável que você ddnão tenha sobrescrito nada, pois a maioria dos bits importantes de um sistema de arquivos está na frente. Verifique /etc/fstabpara ver quais partições correspondem a qual parte do seu sistema e use a quantidade de dados ddcopiados para obter uma estimativa de quanto você matou. Se você substituir apenas parte de um sistema de arquivos, um bom fsck poderá consertá-lo um pouco (mas você perdeu uma boa parte dos dados).

Muito provavelmente, você substituiu /boot. Você terá que reinstalar seu kernel (com aptitude) e reinstalar o GRUB2 (com grub-install) (que destruiu o primeiro e o segundo estágio). O GRUB2 está configurado com arquivos /etc, para que você não precise recriar nada manualmente.

HTNW
fonte
15
"Verifique /sys/block/sda/*/{start,end}e recrie suas partições com esta informação": você poderia expandir um pouco isso? Não é uma operação trivial e parece ser o principal ponto de sua excelente resposta.
terdon
Saída que é mais fácil de decifrar, digite estes no shell tempo com um RETURN após cada ...............: sudo parted, unit s, print all,quit
Hannu
3
Copie qualquer informação valiosa para outra unidade (por exemplo, um pen drive) à medida que a descobrir. Caso alguma das etapas de recreação da partição não corra perfeitamente, você deseja registrar o que estava na memória do computador ainda em execução. Além disso, copie os arquivos mais valiosos e / ou pequenos (incluindo itens semelhantes .bashrce outros arquivos de ponto do diretório inicial e todos /etc, além dos dados reais) para outro disco enquanto o computador em execução ainda estiver funcionando . O tar.gz é um bom formato para copiar diretórios inteiros (porque preserva permissões e outras coisas).
Peter Cordes
Ele também vai provavelmente precisar reformatar o que era / boot, que é meio perigoso quando há incerteza que o kernel pensa em seu layout partição ...
rackandboneman
1
@rackandboneman O kernel se recusa a reler as tabelas de partição em um disco com partições montadas. Reformatar /bootassim é perfeitamente "seguro" (módulo literalmente tudo o mais sobre esta situação ) porque o kernel não é incerto sobre nada.
HTNW
21

Desculpe ler sobre a sua dura sorte

Eu acho que você não tem nenhum backup atual, e lamento ler sobre sua dura sorte usando

sudo dd if=image.iso of=/dev/sdx

onde você usou a letra da unidade x= apara substituir o início da unidade de disco rígido, onde armazenava muitos dados valiosos.

Você não é a primeira pessoa e receio que não seja a última pessoa afetada por esse problema. ddé recomendado em muitos sites para ser usado assim. É um método poderoso, mas perigoso, porque faz o que você pede para fazer sem perguntas. Por esse motivo, é frequentemente apelidado de 'Destruidor de dados'.

@marcelm comenta que esse apelido é injusto. Ele está certo que escrever diretamente em um arquivo de dispositivo como root está causando o risco . Portanto, esteja ciente de que você pode substituir facilmente uma unidade e destruir dados valiosos gravando no arquivo do dispositivo correspondente /dev/sdx. (Ferramentas mais seguras estão listadas no final desta resposta.)

Recupere a tabela de partição, sistemas de arquivos e / ou conteúdo do arquivo

  • Faça o mínimo possível com a unidade e, acima de tudo, não escreva nada, pois isso pode piorar a situação substituindo dados, que ainda são possíveis de recuperar.

  • Se seus dados são valiosos, você deve trabalhar em uma cópia clonada , não na unidade original (parcialmente substituída). Consulte este link, role para baixo até 'Reparo avançado de uma tabela de partição, sistema de arquivos e / ou recuperação de arquivos'

    Repare a tabela de partição e o sistema de arquivos de um pendrive

  • Se você tivesse uma tabela de partição GUID, GPT, há uma cópia de segurança da tabela de partição no final da unidade /dev/sda, e você pode ser capaz de restaurar a tabela de partição principal a partir desta tabela backup usando a ferramenta gdisk. Veja o manual man gdiskpara detalhes.

  • Você pode restaurar a tabela de partição e os sistemas de arquivos usando o Testdisk de

    http://cgsecurity.org

    Leia as instruções no site da CGSecurity e também o link fornecido pelo @ElderGeek. As partições desapareceram após a perda de energia durante a instalação

  • Você também pode restaurar a tabela de partição e os sistemas de arquivos usando o gpart / gparted de acordo com o link fornecido pelo @CSM,

    COMO: Restaurar partições perdidas em uma tabela de partição excluída ou corrompida

  • PhotoRec : Se você não conseguir recuperar a tabela de partição e os sistemas de arquivos, ainda poderá recuperar alguns dados do arquivo. Os arquivos no cabeçalho, talvez de 1 a 1,5 GB, são substituídos e perdidos, mas os arquivos por trás dessa parte da unidade ainda estão lá. O PhotoRec de http://cgsecurity.org é uma ferramenta que pode recuperar dados 'da superfície da unidade' sem um sistema de arquivos. Dados típicos no início de tipos de arquivos comuns são usados ​​para identificação.

    O link a seguir fornece detalhes sobre o PhotoRec,

    https://www.cgsecurity.org/wiki/PhotoRec

    Você deve salvar os arquivos em uma partição em uma unidade separada.

    Não é possível recuperar a estrutura de diretórios e geralmente não é possível recuperar os nomes dos arquivos (e não as permissões e a propriedade), e há problemas quando os arquivos são fragmentados, mas muitos arquivos podem ser recuperados pelo PhotoRec (não apenas fotos, também muitos outros tipos de arquivos comuns). Mas, e esse é um grande, mas é muito trabalhoso percorrer a enorme quantidade de arquivos não classificados para identificar o que são realmente importantes, que você deve renomear para nomes de arquivos significativos.

Ferramentas mais seguras para criar drives de inicialização USB com o Ubuntu

No futuro, use uma ferramenta que ajude a identificar e selecionar o dispositivo de destino correto e que tenha um ponto de verificação final, para que você possa verificar novamente se clonará do arquivo iso para o dispositivo de destino correto, por exemplo

  • No Ubuntu: o Ubuntu Startup Disk Creator (no Ubuntu 16.04 LTS e versões mais recentes),
  • No Linux:

    • Alias ​​de discosgnome-disks ,
    • mkusb ,
  • No Windows: Win32DiskImager .

Você também pode usar ferramentas de extração , que fornecem um ponto de verificação final, por exemplo

sudodus
fonte
1
posso garantir o Testdisk do cgsecurity, funciona muito melhor do que outras alternativas que tentei no passado, onde o Testdisk foi o único que conseguiu recuperar algo útil. mas tenha cuidado, o pequeno filho da puta usa o padrão para tentar recuperar sua partição na própria unidade !! xx
hanshenrik 4/17/17
1
+1. Eu também posso garantir testdisk. Também é um script de invólucro para impedir a ddgravação no seu / sda / sdb / o que for uma boa ideia também.
WinEunuuchs2Unix 17/01
19

Por seu ddcomando, você substituiu a tabela de partição de / dev / sda e todos os dados até o tamanho de image.iso.

Portanto, o melhor que você pode conseguir é restaurar sua tabela de partições (com tamanhos exatos) para recuperar pelo menos as partições no final de / dev / sda.

muclux
fonte
1
Se você quiser saber como obter os tamanhos exatos, consulte o segundo parágrafo desta resposta .
precisa saber é o seguinte
16

Com exceção da restauração de um backup, não há como recuperar totalmente. O DD substituiu a tabela de partição e alguns dos dados do dispositivo.

tropeçar
fonte
19
Acho que devo jogar fora todos os meus backups de recuperação de desastre.
amigos estão dizendo sobre stumblebee
23
@ Baaing Cow, é claro que é uma resposta e, claro, não pode haver maneira de recuperar dados. É isso que significa quando você substitui os dados: eles se foram.
Psusi
22
@ ChaiT.Rex Isso parece ser um mito, pelo menos em qualquer equipamento que você provavelmente encontre em um PC fabricado na última década.
David Schwartz
19
@ ChaiT.Rex Isso só se aplica a discos não totalmente substituídos, em que apenas parte do disco é apagada. Se o disco inteiro foi apagado ou substituído, no entanto, não há recuperação de dados. Especialistas ou não.
Thomas Ward
8
@BaaingCow Como você sabe que deve haver uma maneira de restaurar os dados, informe-nos. Muitas pessoas estarão dispostas a pagar pela sua técnica!
Tim
9

Se a sua unidade estiver particionada em partições /e /homepartições separadas , e a /homepartição ocorreu após a /partição, você poderá recuperar seus dados. O MBR que lista onde estão a maioria das partições foi substituído. No entanto, o gparted pode recuperar sua /homepartição.

Este post nos fóruns do Ubuntu fornece algumas idéias sobre como fazê-lo; Descobri isso pesquisando "partição de recuperação gparted".

Depois de encontrar sua partição perdida (pode estar dentro de uma partição estendida), você deve adicioná-la como a única partição na tabela de partições.

Depois de fazer isso, você terá que reinstalar o Linux, dizendo para manter a partição recuperada como /home.

CSM
fonte
2

Testdisk para o resgate

Pessoalmente, posso atestar o Testdisk, que salvou meus dados depois de copiar e colar repetidamente as instruções /dev/sdbe alterá-las para o /dev/sddque era meu USB. Apenas uma vez eu esqueci de trocá-lo e fui /dev/sdbpara o lixo.

Configure seu sistema para nunca gravar em /dev/sda

Eu recomendo fortemente a criação de um script wrapper: Impeça que o `dd` destrua o SSD ou o HDD . Isso garante que ddnunca escreva para /dev/sdaou possivelmente /dev/sdbou para qualquer outro dispositivo de armazenamento em massa.

WinEunuuchs2Unix
fonte