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

4

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

FDisk'ing a imagem dá isto:

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

Disk 2013-02-09-wheezy-raspbian.img: 1939 MB, 1939865600 bytes
255 heads, 63 sectors/track, 235 cylinders, total 3788800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00014d34

                         Device Boot      Start         End      Blocks   Id  System
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 é assim:

# fdisk -l /dev/sdc

Disk /dev/sdc: 8014 MB, 8014266368 bytes
247 heads, 62 sectors/track, 1022 cylinders, total 15652864 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048      131071       64512    e  W95 FAT16 (LBA)
/dev/sdc2          131072    15652863     7760896   83  Linux
#

Eu 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, eu vou usar o GParted para limpar isso, e eu preciso disso para qualquer outra coisa.

    
por JamesTheAwesomeDude 20.04.2013 / 23:22

4 respostas

4

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

Se --partscan não funcionar, você também pode usar um destes:

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

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

Você provavelmente deve montá-lo primeiro apenas para ver se é a coisa certa ou o quê.

É claro que você também pode ler a saída do fdisk e dar dd o skip=131072 ou o que quer que seja diretamente, isto é, fazer saltar muitos blocos de entrada para começar a ler onde a partição está localizada; mas é melhor ver partições reais com um dispositivo de loop.

    
por 21.04.2013 / 00:40
0

Algo como isso deve funcionar:

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

if = define a imagem que você deseja clonar

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

    
por 20.04.2013 / 23:52
0
  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 , poderá fazer dd if=/dev/loop0p1 of=image.img , mas acho que você gostaria de cat better. Em um shell raiz, basta fazer cat /dev/loop0p1 > image.img . Os dois exemplos assumem que você deseja a primeira partição e o dispositivo de loopback ao qual você foi atribuído foi /dev/loop0
  3. Quando terminar o dispositivo de loopback, você poderá desanexá-lo com losetup -d /dev/loop0 . Mais uma vez, isso pressupõe que /dev/loop0 seja seu dispositivo de loopback.
por 29.08.2016 / 03:02
0

Você poderia fazer:

sudo partx --add -v 2013-02-09-wheezy-raspbian.img 
# time sudo dd if=/dev/loop0p1 |pv -s 80M |sudo dd of=/dev/sdc1
time sudo dd if=/dev/loop0p2 |pv -s 4G |sudo dd of=/dev/sdc2
sudo partx --delete -v /dev/loop0
    
por 09.01.2017 / 01:50