Назад | Перейти на главную страницу

Как скопировать образ диска 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 выглядит так (всего 3000 МБ):

root 2000
swap 1000

Поэтому я сначала создаю раздел LVM, достаточно большой, чтобы вместить виртуальную машину. Я думал, что он должен быть того же размера, что и сумма разделов, но разве это не правильно? Стоит ли делать 3001М?

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 в необработанный файл:

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

Опять же, у меня нет проблем с использованием раздела LVM с виртуальной машиной KVM, но стоит ли мне беспокоиться об этом? Его размер на 1 048 576 байт (ровно на 1 МБ) меньше размера исходного файла изображения. Должен ли я добавлять 1 МБ в раздел LVM при его создании?

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?

У вас может быть просто одна математическая ошибка:

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

Но вы сделали свой LV ровно 3000MB?

Нет ничего плохого в том, что DD'ы накладывают один раздел на другой. Несмотря на то, что ваш список разделов vmbuilder увеличился до 3000, ваш файл .qcow представляет собой образ жесткого диска, который включает таблицу разделов + mbr @ на лицевой стороне диска.