web-dev-qa-db-ja.com

KVMディスクイメージをLVMにコピーする方法

問題

Ddコマンドを実行すると、デバイスにスペースが残っていませんエラーが発生します。 KVM qcow2ファイルをLVMパーティションに移動しようとしていますが、LVMパーティションはvmbuilder.partitionファイルのパーティションの合計と同じサイズである必要があると思いました。これは このHowToForgeの記事 でどのように説明されているか。エラー出力は次のとおりです。

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

新しいコピーを使用できますが、それでもすべて正常に動作しているようです。でも心配する必要があると思います。 ddを使用して別のファイルにコピーすると、ファイルのサイズがLVMパーティションよりわずかに大きくなります。詳細については、以下を参照してください。

追加の詳細

KVMとvmbuilderを使用してディスクイメージを作成しています。vmbuilder.partitionファイルは次のようになります(合計3000MB)。

root 2000
swap 1000

そこで、最初にVMを保持するのに十分な大きさのLVMパーティションを作成します。パーティションの合計と同じサイズになるはずだと思っていましたが、これは正しくありませんか? 3001Mにする必要がありますか?

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

次に、vmbuilderを使用してディスクイメージを作成します。

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 ;

完了したら、qcow2ファイルを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

最後に、それを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

したがって、いくつかの追加テスト(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

繰り返しになりますが、KVM仮想マシンでLVMパーティションを使用しても問題はありませんが、心配する必要がありますか?サイズは元のイメージよりも1,048,576バイト(正確に1MB)小さいですファイルを作成するときに、LVMパーティションに1MBを追加する必要がありますか?

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

これで、サイズが切り上げられたパーティションを作成しましたが、コピーはそれに収まります。

Qcow2ファイルをLVMパーティションにコピーするための正しいプロセスは何ですか?また、LVMデバイスよりもファイルへのコピーがはるかに高速である理由は何ですか?

4
Tauren

単純に1つずつずれた数学エラーが発生する可能性があります。

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

しかし、あなたはあなたのLVを正確に3000MBにしましたか?

あるパーティションを別のパーティションにDDすることには何の問題もありません。 vmbuilderパーティションリストの合計が3000になったとしても、.qcowファイルはハードドライブイメージであり、パーティションテーブル+ mbr @ディスクの前面が含まれています。

2
Jason