Como posso dividir uma imagem de unidade criada com 'dd' em arquivos separados para cada partição?

9

Eu criei uma imagem de uma unidade com falha com:

dd if=/dev/sde of=/mnt/image001.dd

O disco tinha apenas duas partições:

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1   *           1          13      102400    7  HPFS/NTFS
/dev/sde2              13       60802   488282112    7  HPFS/NTFS

Como posso dividir a imagem (image001.dd) em dois ou três arquivos (1: MBR; 2: Partição 1; 3: Partição 2) para que eu possa montar o arquivo sistemas de arquivos nele?

Uma solução que descobri que não funcionaria para mim é usar split para criar muitos arquivos de 512K e, em seguida, cat juntos em três arquivos (1: 512K, 2: 105M, 3: o resto), mas não tenho espaço em disco para isso.

História:
Eu já copiei a imagem inteira para uma nova unidade, e ela inicializa e funciona principalmente. Parece que o FS foi corrompido na unidade com falha antiga e dd copiou as partes corrompidas (como deveria), e eu as gravei na nova unidade. Minha solução é montar o FS que eu copiei e copiar apenas os arquivos (usando rsync ou algo assim) para que esperançosamente eu não copie os bits ruins.

UPDATE 1 : Eu tentei dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1 , mas mount reclama que NTFS signature is missing , então eu acho que não fiz isso direito.

    
por Joe A 25.02.2012 / 20:11

2 respostas

16

Você não precisa dividir isso.

Use parted para obter detalhes sobre a tabela de partições:

parted image001.dd

Em parted , alterne para unidades de bytes com o comando u e, em seguida, B . Depois disso, emita o comando print .

Você obterá uma saída assim (a saída é de um sistema real, não de uma imagem):

Model: Virtio Block Device (virtblk)
Disk /dev/vda: 25165824000B
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start         End           Size          Type     File system     Flags
 2      1048576B      400556031B    399507456B    primary  ext4            boot
 3      400556032B    21165506559B  20764950528B  primary  ext4
 1      21165506560B  25164775423B  3999268864B   primary  linux-swap(v1)

Você pode usar o número Start como um deslocamento para uma montagem de loopback:

mount -o loop,ro,offset=400556032 image001.dd /mnt/rescue

montaria a terceira partição em /mnt/rescue .

    
por 25.02.2012 / 20:43
16

É muito melhor simplesmente usar a ferramenta kpartx .

usage : kpartx [-a|-d|-l] [-v] wholedisk
    -a add partition devmappings
    -d del partition devmappings
    -l list partitions devmappings that would be added by -a
    ...

Exemplo:

# kpartx -l whole_disk # only listing
loop0p1 : 0 518144 /dev/loop0 2048
loop0p2 : 0 3674112 /dev/loop0 520192
# kpartx -a whole_disk 
# file -sL /dev/mapper/loop0p*
/dev/mapper/loop0p1: Linux/i386 swap file (new style), version 1 (4K pages), size 64767 pages, no label, UUID=e4990860-c87d-4850-9e8d-ecb0a0506516
/dev/mapper/loop0p2: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

Neste ponto, posso montar /dev/mapper/loop0p2 .

Depois de desmontar a chamada kpartx -d whole_disk para limpar.

    
por 25.02.2012 / 20:59