Adicionando um dispositivo de disco existente preenchido a uma imagem bruta do QEMU

1

Eu tenho uma imagem bruta do QEMU (vda.raw), e gostaria de redimensioná-la e adicionar uma partição existente, usando os dados que tenho em um arquivo que contém um sistema de arquivos raw ext3 preenchido com dados (vdb.raw) . Os dois arquivos são assim:

$ file vda.raw
vda.raw: x86 boot sector; partition 1: ID=0x83, active, starthead 0, startsector 16065, 20948760 sectors, code offset 0x63
$ file vdb.raw
vdb.raw: Linux rev 1.0 ext3 filesystem data, UUID=14555b9c-4837-4b43-a8e8-fe4e19194e88, volume name "ephemeral0" (large files)

Existe uma maneira simples de criar uma nova imagem combinando estes dois: onde o conteúdo de vdb.raw aparece como uma nova partição de disco em vda.raw? Eu gostaria de evitar ter que:

  1. Redimensionar vda.raw
  2. Crie uma nova partição em vda.raw
  3. Montar vda.raw
  4. Montar vdb.raw
  5. Copie o conteúdo de vdb.raw para vda.raw

Existe uma maneira que eu poderia, digamos, concatená-los com o dd, e então consertar a tabela de partição para torná-la ciente de que há uma nova partição na imagem?

    
por Lorin Hochstein 28.02.2012 / 00:01

1 resposta

1

Você já tentou o óbvio - simplesmente concatenando vdb para vda e criando uma nova partição? Eu tentei isso e parece funcionar. Aqui está o que eu fiz ...

Eu comecei com dois arquivos:

# ls -l vd*
-rw-r--r-- 1 root root 104857600 Feb 27 20:31 vda.raw
-rw-r--r-- 1 root root 104857600 Feb 27 20:31 vdb.raw

# file vd[ab].raw
vda.raw: x86 boot sector; partition 1: ID=0x83, starthead 32, startsector 2048, 202752 sectors, extended partition table (last)1, code offset 0x0
vdb.raw: Linux rev 1.0 ext3 filesystem data, UUID=734fa0ee-0bc8-4428-a13c-3147c9c0866f

O arquivo vda.raw contém um mapa de partição padrão com uma única partição (contendo um arquivo files3 ext3):

# fdisk -l vda.raw 

Disk vda.raw: 104 MB, 104857600 bytes
191 heads, 50 sectors/track, 21 cylinders, total 204800 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: 0xad0a5dfe

  Device Boot      Start         End      Blocks   Id  System
vda.raw1            2048      204799      101376   83  Linux

vdb.raw contém um sistema de arquivos ext3 .

Primeiramente, concatenamos esses dois arquivos juntos:

# cat vda.raw vdb.raw > combined.raw

Em seguida, criamos uma nova partição que abrange os novos dados:

# fdisk combined.raw

Aqui está a tabela de partições inicial:

Command (m for help): p

Disk combined.raw: 209 MB, 209715200 bytes
191 heads, 50 sectors/track, 42 cylinders, total 409600 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: 0xad0a5dfe

       Device Boot      Start         End      Blocks   Id  System
combined.raw1            2048      204799      101376   83  Linux

Agora, criamos um novo, aceitando os padrões para setor de início e tamanho:

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (204800-409599, default 204800): 
Using default value 204800
Last sector, +sectors or +size{K,M,G} (204800-409599, default 409599): 
Using default value 409599

Command (m for help): w
The partition table has been altered!

Syncing disks.

Agora vamos ver o que temos:

# kpartx -a combined.raw 
# mkdir /mnt/{1,2}
# mount /dev/mapper/loop1p1 /mnt/1
# mount /dev/mapper/loop1p2 /mnt/2
# ls /mnt/1
lost+found  README.vda
# ls /mnt/2
lost+found  README.vdb
# 

Ta-da!

    
por 28.02.2012 / 02:37