dd restaurar imagem para HDD (com problemas)

0

Eu fiz uma imagem completa (pelo menos acho que usei) usando dd if=/dev/sda of=/mnt/sda.img bs=32M onde mnt é um HD externo que uso.

Eu vim para restaurar essa imagem esta manhã, então eu inicializei em um USB ao vivo e montei o HD externo e executei o dd if=/mnt/sda.img of=/dev/sda bs=32M , eu reiniciei e acontece que a unidade está faltando o MBR e a tabela de partições. Eu tentei gravar no disco novamente com um tamanho muito menor de blocos, eu penso em 64k, mas isso não fez diferença.

De alguma forma eu falhei em fazer o backup de todo o disco? (ou seja, perdeu o MBR?)

Eu executei o arquivo em sda.img e o identifiquei como dados ext4.

EDIT: (em resposta a mpy)

Foi no meu entendimento que os comandos que eu executei deveriam ter imaginado todo o disco, desde o primeiro setor até o último.

sfdisk -l /mnt/sda.img yields

sfdisk: Disk sda.img: cannot get geometry

Disk sda.img: 7294 cylinders, 255 heads, 63 sectors/track

Eu tenho duas imagens neste disco rígido, uma com o linux instalado, a outra com o win 7. A imagem do Linux não é do mesmo tamanho, é menor, presumivelmente dd não copiou tudo.

ls -l

..... 60003385344 May 29 14:19 sda.img

..... 64023257088 May 31 13:08 sda-win.img

Eu aprecio o fato de que eu deveria ter verificado o tamanho da imagem antes de limpar meu HD agora ... Seria possível tentar restaurar essa imagem (digamos, apenas suponha que a falta de 4 GB seja apenas espaço vazio)? Curiosamente, posso montar a imagem em loop e ter acesso ao que parece ser a maioria dos dados (não consigo ver nada faltando)

    
por Will 01.06.2013 / 12:31

1 resposta

1

Se você puder montar sua imagem em loop, isso indica que a imagem inclui apenas uma partição. Normalmente, você deve receber um erro se tentar montar uma imagem de um disco inteiro em loop:

# mount -o loop sda.img /mnt/loop
mount: you must specify the filesystem type

Isso é verificado por file , que também relatou um sistema de arquivos ext4 para você. Para uma imagem de disco inteira file deve identificar um setor de inicialização:

# file sda.img
sda.img: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, stage2 address 0x2000, stage2 segment 0x200, GRUB version 0.97; partition 1: ID=0x83, active, starthead 32, startsector 2048, 77607966 sectors; partition 2: ID=0x82, starthead 254, startsector 77611008, 4194304 sectors; partition 3: ID=0x83, starthead 254, startsector 81805312, 894967808 sectors, code offset 0x48, OEM-ID "      0", Bytes/sector 190, sectors/cluster 124, reserved sectors 191, FATs 6, root entries 185, sectors 64514 (volumes <=32 MB) , Media descriptor 0xf3, sectors/FAT 20644, heads 6, hidden sectors 309755, sectors 2147991229 (volumes > 32 MB) , physical drive 0x7e, dos < 4.0 BootSector (0x0)

Para referência, aqui está a saída de sfdisk -l para uma imagem de disco ( sda.img ) e uma imagem de partição ( sda1.img ):

# sfdisk -l sda.img
Disk sda.img: cannot get geometry

Disk sda.img: 0 cylinders, 0 heads, 0 sectors/track
Warning: The partition table looks like it was made
  for C/H/S=*/255/63 (instead of 0/0/0).
For this listing I'll assume that geometry.
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
 sda.img1   *      0+   4830-   4831-  38803983   83  Linux
 sda.img2       4831+   5092-    262-   2097152   82  Linux swap / Solaris
 sda.img3       5092+  60801-  55710- 447483904   83  Linux
 sda.img4          0       -       0          0    0  Empty

# sfdisk -l sda1.img
Disk sda1.img: cannot get geometry

Disk sda1.img: 0 cylinders, 0 heads, 0 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
 sda1.img: unrecognized partition table type
No partitions found

Portanto, suponho que seu sda.img contenha apenas uma partição. Isso é melhor que nada. Adivinhando (!) Dos diferentes tamanhos (64023257088-60003385344 = aproximadamente 4 GB), eu suponho que você só perdeu sua partição swap, o que não faz mal.

Então, o que fazer?

  1. particione seu disco rígido com sda1 = 60003385344 bytes ( sda2 = o restante)
  2. escreva sua imagem para sda1 .
  3. restaura o carregador de boot
    • como fazer isso depende de qual você usou
    • para o GRUB:
      1. mount sda1 (por exemplo, mkdir /root/part1 && mount /dev/sda1 /root/part1 )
      2. chroot /root/part1
      3. update-grub (este é o caminho do Debian, depende da sua distribuição)
por 01.06.2013 / 16:14

Tags