Como usar o DD para clonar uma partição de uma imagem de disco?

Como usar o DD para clonar uma partição de uma imagem de disco?

Eu tenho uma imagem de disco, é uma imagem de disco "completa", por exemplo, contém várias partições e quero clonar apenasumdeles (não o primeiro ..) em uma partição em uma unidade externa com várias partições (também não estou clonando na primeira partição do disco ...)

Fazer o FDisk da imagem dá o seguinte:

# fdisk -l 2013/02/09-wheezy-raspbian.img

Disco 2013-02-09-wheezy-raspbian.img: 1939 MB, 1939865600 bytes
255 cabeçotes, 63 setores/pista, 235 cilindros, total de 3.788.800 setores
Unidades = setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes/512 bytes
Tamanho de E/S (mínimo/ideal): 512 bytes/512 bytes
Identificador de disco: 0x00014d34

                         Sistema de identificação de blocos de início de inicialização do dispositivo
2013-02-09-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2013-02-09-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
#

e o dispositivo de bloco fica assim:

# fdisk -l /dev/sdc

Disco /dev/sdc: 8014 MB, 8014266368 bytes
247 cabeçotes, 62 setores/pista, 1.022 cilindros, total de 1.565.2864 setores
Unidades = setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes/512 bytes
Tamanho de E/S (mínimo/ideal): 512 bytes/512 bytes
Identificador de disco: 0x00000000

   Sistema de identificação de blocos de início de inicialização do dispositivo
/dev/sdc1 2048 131071 64512 e W95 FAT16 (LBA)
/dev/sdc2 131072 15652863 7760896 83 Linux
#

Quero que a segunda partição da imagem substitua a segunda partição do dispositivo de bloco. Não se preocupe com o espaço livre corrompido, usarei o GParted para limpá-lo e, de qualquer maneira, preciso dele para outra coisa.

Responder1

# losetup --find --show --partscan --read-only 2013-02-09-wheezy-raspbian.img
/dev/loop7
# dd if=/dev/loop7p2 of=/dev/narnia bs=1M

Se --partscannão funcionar, você também pode usar um dos seguintes:

# partx -a /dev/loop7
# kpartx /dev/loop7

ou soluções semelhantes de mapeamento de partição.

Você provavelmente deveria montá-lo primeiro só para ver se é a coisa certa ou o quê.

É claro que você também pode ler a saída do fdisk e fornecer ddo skip=131072ou qualquer coisa diretamente, ou seja, fazê-lo pular tantos blocos de entrada para que ele comece a ler onde a partição está localizada; mas é melhor ver partições reais com um dispositivo de loop.

Responder2

Algo assim deve funcionar:

dd if=/path/to/2013-02-09-wheezy-raspbian.img2 of=/dev/sdc2 bs=4096 conv=notrunc,noerror

se= define a imagem que você deseja clonar

de= define a partição de destino onde você deseja clonar a imagem

Responder3

  1. Monte a imagem como um dispositivo de loopback:losetup -fP yourImage.img
  2. Agora você pode acessar cada partição da imagem diretamente. Se você precisar usar dd, você pode fazer dd if=/dev/loop0p1 of=image.img, mas acho que você gostaria de catalgo melhor. Em um shell root, simplesmente faça cat /dev/loop0p1 > image.img. Ambos os exemplos assumem que você deseja a primeira partição e que o dispositivo de loopback atribuído a você foi/dev/loop0
  3. Quando terminar de usar o dispositivo de loopback, você pode desconectá-lo com losetup -d /dev/loop0. Mais uma vez, isso pressupõe que esse /dev/loop0seja o seu dispositivo de loopback.

Responder4

Você pode copiar apenas a segunda partição para uma imagem separada com este

dd if=2013-02-09-wheezy-raspbian.img of=second.img bs=512 skip=122880

e depois disso você pode copiá-lo no lugar da partição no disco

dd if=second.img of=/dev/sdc2 bs=512

ou você pode até fazer isso em um comando

dd if=2013-02-09-wheezy-raspbian.img of=/dev/sdc2 bs=512 skip=122880

Apenas certifique-se de desmontar /dev/sdc2 antes de escrever nele.

informação relacionada