Como copiar a imagem de disco do KVM para o LVM

3

Problema

Estou recebendo um erro Sem espaço no dispositivo ao executar um comando dd. Eu estou tentando mover um arquivo KVM qcow2 para uma partição LVM e pensei que a partição LVM precisava ser o mesmo tamanho que a soma das partições no arquivo vmbuilder.partition. É assim que é descrito em artigo HowToForge . Aqui está a saída de erro:

root@bond:/tmp/zing-UZFgZpj1# dd if=disk0.raw of=/dev/vol/zing bs=1M
dd: writing '/dev/vol/zing': No space left on device
3001+0 records in
3000+0 records out
3145728000 bytes (3.1 GB) copied, 32.5236 s, 96.7 MB/s

Eu posso usar a nova cópia e tudo ainda parece funcionar bem. Eu estou supondo que eu deveria estar preocupado embora. Quando eu uso o dd para copiá-lo para outro arquivo, o tamanho do arquivo é um pouco maior que a partição do LVM! Veja abaixo para detalhes.

Detalhes adicionais

Estou usando o KVM e o vmbuilder para criar a imagem do disco. Meu arquivo vmbuilder.partition se parece com isso (um total de 3000MB):

root 2000
swap 1000

Então eu primeiro criei uma partição LVM grande o suficiente para manter a VM. Eu pensei que era para ser o mesmo tamanho que a soma das partições, mas isso não é correto? Devo fazê-lo 3001M?

root@bond:~/vmbuilder# lvcreate -L3000M -n zing vol
   Logical volume "zing" created

Então eu uso o vmbuilder para criar a imagem do disco:

root@bond:~/vmbuilder# vmbuilder kvm ubuntu -o \
    --templates=/root/vmbuilder/templates \
    --ip=192.168.0.225 \
    --hostname=zing \
    --raw=/dev/vol/zing \
    --part=/root/vmbuilder/appliances/jetty/vmbuilder.partition \
    --pass=7dhsLzUp \
    --dest=/tmp/zing-UZFgZpj1 \
    --user=zing \
    --mem=2048 \
    --firstboot=/tmp/boot-UZFgZpj1.sh \
    --copy=/tmp/copyfiles-UZFgZpj1 \
    --addpkg=jetty ;

Quando terminar, converto o arquivo qcow2 em um arquivo raw:

root@bond:/tmp/zing-UZFgZpj1# ls -al
total 447892
drwxr-xr-x 2 root root      4096 2010-03-06 16:51 .
drwxrwxrwt 5 root root      4096 2010-03-06 16:51 ..
-rw-r--r-- 1 root root 458752000 2010-03-06 16:51 disk0.qcow2

root@bond:/tmp/zing-UZFgZpj1# qemu-img convert disk0.qcow2 -O raw disk0.raw
root@bond:/tmp/zing-UZFgZpj1# ls -al
total 891384
drwxr-xr-x 2 root root       4096 2010-03-06 17:32 .
drwxrwxrwt 5 root root       4096 2010-03-06 16:51 ..
-rw-r--r-- 1 root root  458752000 2010-03-06 16:51 disk0.qcow2
-rw-r--r-- 1 root root 3146776576 2010-03-06 17:32 disk0.raw

Por fim, copio para a partição LVM:

root@bond:/tmp/zing-UZFgZpj1# dd if=disk0.raw of=/dev/vol/zing bs=1M
dd: writing '/dev/vol/zing': No space left on device
3001+0 records in
3000+0 records out
3145728000 bytes (3.1 GB) copied, 32.5236 s, 96.7 MB/s

Portanto, alguns testes adicionais (copiar para outro arquivo, não LVM):

root@bond:/tmp/zing-UZFgZpj1# dd if=disk0.raw of=zing.disk bs=1M
3001+0 records in
3001+0 records out
3146776576 bytes (3.1 GB) copied, 4.64961 s, 677 MB/s

root@bond:/tmp/zing-UZFgZpj1# ls -l
total 3964404
-rw-r--r-- 1 root root  458752000 2010-03-06 16:51 disk0.qcow2
-rw-r--r-- 1 root root 3146776576 2010-03-06 17:32 disk0.raw
-rw-r--r-- 1 root root 3146776576 2010-03-06 17:33 zing.disk

Novamente, não estou tendo problemas para usar a partição LVM com uma máquina virtual KVM, mas devo me preocupar com isso? Seu tamanho é 1.048.576 bytes (exatamente 1MB) menor que o arquivo de imagem original. Devo adicionar 1MB à partição LVM quando a criar?

root@bond:~/vmbuilder# lvremove /dev/vol/zing
Do you really want to remove active logical volume "zing"? [y/n]: y
  Logical volume "zing" successfully removed

root@bond:~/vmbuilder# lvcreate -L3001M -n zing vol
  Rounding up size to full physical extent 2.93 GB
  Logical volume "zing" created

root@bond:/tmp/zing-UZFgZpj1# dd if=disk0.raw of=/dev/vol/zing bs=1M
3001+0 records in
3001+0 records out
3146776576 bytes (3.1 GB) copied, 31.0581 s, 101 MB/s

Agora criei uma partição cujo tamanho foi arredondado, mas a cópia cabe nela.

Qual é o processo correto para copiar arquivos qcow2 para partições LVM? Além disso, alguma idéia por que é tão mais rápido copiar para um arquivo do que para um dispositivo LVM?

    
por Tauren 07.03.2010 / 02:04

1 resposta

2

Você pode simplesmente ter um erro de matemática off-by-one:

3146776576 (size, in bytes of your .raw file)  / 1024 (kb) / 1024 (mb) == 3001MB

Mas você fez o seu LV exatamente 3000MB?

Não há nada errado em colocar uma partição em outra. Mesmo que a sua lista de partições do vmbuilder tenha sido adicionada a 3000, o seu arquivo .qcow é uma imagem do disco rígido, que inclui uma tabela de partições + mbr @ na frente do disco.

    
por 07.03.2010 / 13:18