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


9

Criei uma imagem de uma unidade com falha com:

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

A unidade 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 os sistemas de arquivos nela?

Uma solução que eu descobri que não funcionaria para mim é usar splitpara criar muitos arquivos de 512K e catjuntá-los novamente em três arquivos (1: 512K, 2: 105M, 3: o resto), mas não tenho o espaço em disco para isso.

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

ATUALIZAÇÃO 1 : Eu tentei, dd if=/mnt/image001.dd of=/mnt/image001.part1.dd bs=512 count=204800 skip=1mas mountreclamo disso NTFS signature is missing, então acho que não fiz direito.

Respostas:


17

Você não precisa dividir isso.

Use partedpara obter detalhes sobre a tabela de partição:

parted image001.dd

Em parted, alterne para unidades de bytes com o comando u, então B. Depois disso, emita o comando print.

Você obterá uma saída semelhante a esta (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 Startnúmero 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.


Isso e kpartxresolve meu problema. Eu escolhi essa resposta porque eu imagino que isso partedé mais comum do que kpartx, no entanto, kpartxé um pouco mais fácil.
31512 Joe

16

É muito melhor simplesmente usar a kpartxferramenta.

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 eu posso montar /dev/mapper/loop0p2.

Após a desmontagem, ligue kpartx -d whole_diskpara limpar.


1
+1 Isso é bom, nunca ouvi falar dessa ferramenta.
Sven

Tanto esta resposta do SvenW abaixo funciona muito bem! Ambos me permitem montar uma partição na imagem da unidade.
31512 Joe
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.