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?