Proxmox подключить raw диск к виртуальной машине
Занимался на днях переносом виртуальных машин с обычного kvm гипервизора на proxmox. На исходном гипервизоре диски виртуальных машин были в формате qcow2. Я решил заодно сконвертировать диски из qcow2 в lvm и написать заметку об этом, чтобы не забыть.
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти вступительный теcт.
Для тех, кто не знает, в чем разница между разными форматами дисков в гипервизоре KVM, предлагаю почитать об этом в моей статье на тему бэкапа виртуальных машин kvm. В общем случае, сконвертировать диски qcow2 в lvm можно следующим образом. Сначала преобразуем их в raw формат с помощью qemu-img.
Далее raw образ переносим на новый сервер. На нем же к виртуальной машине подключаем новый диск из lvm хранилища такого же размера, как raw образ. Далее в консоли proxmox выполняем конвертацию в lvm с помощью обычного dd.
Все то же самое можно сделать одной командой на новом сервере, перенеся туда диск в формате qcow2.
Последняя команда qemu-img будет работать медленнее, чем dd из предыдущего примера. Каким способом конвертировать - решать вам. Не забудьте изменить путь к lvm разделу. В моем случае он /dev/pve/vm-102-disk-0, у вас имя группы томов может быть другим, не pve.
Я описал общий случай для любого гипервизора KVM. Но конкретно в proxmox это можно сделать проще. Если вам нужно конвертировать qcow2 в lvm на этом же хосте, то достаточно просто через web интерфейс выбрать Move disk и указать в качестве storage хранилище с LVM. Proxmox сам конвертирует диск с помощью того же qemu-img.
Если вы выполняете, как и я, перенос виртуальной машины с одного сервера на другой, то действуйте так:
- Переносим qcow2 диск со старого гипервизора на новый.
- На новом создаем виртуальную машину, подключаем к ней диск любого размера на обычном хранилище в виде директории.
- Запоминаем имя этого диска и удаляем его. Вместо него переносим диск со старого гипервизора и указываем ему такое же имя.
- Запускаем виртуалку на новом сервере, убеждаемся, что она работает, выключаем.
- Через web интерфейс proxmox переносим диск на storage с lvm. Proxmox сам выполнит конвертацию.
Я по такой схеме переносил как linux машины, так и windows. Проблем не было. Единственное, надо не забыть зайти через консоль в windows машину и проверить сетевые настройки. Нужно будет заново настроить сеть, иначе по rdp не подключиться. После переноса сетевой адаптер поменяется.
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
Проверьте себя на вступительном тесте и смотрите подробнее программу ссылке.
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an alternative browser.
AHTOH
New Member
Hello,
I'm migrating from KVM to Proxmox VE.
Two small questions about the storage:
1) How to attach a block device as a raw disk to VM? I have a hdd with LUKS encrypted partition with LVM on it. I would like to pass one of the LVs to my VM as a raw disk.
2) Is it possible to attach the disks to the running VM? If I declare the disk from my Question (1) in the VM, the VM will not start if the LUKS partition is not decrypted (since LVM will not be visible). I want my VM to boot without this disk, then I'll open the LUKS partition and attach the LV (raw device) to the running VM manually.
elmarconi
Member
AHTOH
New Member
Thanks elmarconi, I also found this howto, added the line
virtio1: /dev/mapper/gueststorage-intrastorage,size=3500G
in the VM config file and it seems to work.
Now need to find the way to attach it to the running VM
elmarconi
Member
AHTOH
New Member
Thanks elmarconi! Seems to work. Any idea on how to run it in a non-interactive mode? (A workaround would be to run it interactively and redirect stdin from a file, but it's ugly).
elmarconi
Member
AHTOH
New Member
Ok, finally got it working, but I'm open to any simpler solution.
What I did (Please note that I'm new to Proxmox so I can't guarantee that my manipulations are "right", "safe" or "optimal") :
1) Detect the sockets qemu listening on
which return something like
qmp: filename=unix:/var/run/qemu-server/101.qmp,server
I have only QMP socket listening, what means that I have to talk JSON to it.
2) Check the configuration created by the VE
Edit the VM config file /etc/pve/qemu-server/101.conf and add the disk:
virtio1: /dev/mapper/gueststorage-intrastorage,size=3500G
Hint: run qm rescan
Run the VM normally, ssh to the Host OS (Proxmos) and check the "footprint" of the running VM:
ps aux | grep qemu
Extract the options related to your drive. In my case it was something like:
-drive file=/dev/mapper/gueststorage-intrastorage,if=none,id=drive-virtio1,format=raw,cache=none,aio=native,detect-zeroes=on -device virtio-blk-pci,drive=drive-virtio1,id=virtio1,bus=pci.0,addr=0xb
3) Stop the VM, remove the drive line from the config, start the VM.
4) Try to attach the disk to the running VM
Run socat on the socket and tell it to take the commands from stdin using "-":
socat -,echo=0,icanon=0 unix-connect:/var/run/qemu-server/101.qmp
you should get it waiting for the commands.
Feed it with JSON. The first command must be to switch it to the command mode. The others commands are "constructed" from the data found in (2).
At this stage the blk/pci device should become visible in the guest OS. Check it with lsblk, then mount it .
You are using an out of date browser. It may not display this or other websites correctly.
You should upgrade or use an alternative browser.
New Member
I have a .raw image with linux operating system. How do I make it a hard disk for my virtual machine?
Ideally, I want proxmox to ask me the path on the filesystem to this .raw file.
Add Hard Disk
Bus/Device: VirtIO
Path to image: /tmp/images/some_image.raw
Format: RAW
I can do that easily on libvirt system:
How can I do the same thing in proxmox?
bizzarrone
Member
you can do the same, not with a compressed raw (.gz) but with a raw.
upload your raw into your storage (be sure how you configured the storage, to host images) the add it in the VM config
I have a .raw image with linux operating system. How do I make it a hard disk for my virtual machine?
Ideally, I want proxmox to ask me the path on the filesystem to this .raw file.
Add Hard Disk
Bus/Device: VirtIO
Path to image: /tmp/images/some_image.raw
Format: RAW
I can do that easily on libvirt system:
How can I do the same thing in proxmox?
New Member
you can do the same, not with a compressed raw (.gz) but with a raw.
upload your raw into your storage (be sure how you configured the storage, to host images) the add it in the VM config
Thank you for your reply!
I cannot change the clients configuration of storages - I have to use what is given by default. By default there are only 2 storages:
local (pve)
local-lvm (pve)
The storage "local (pve)" accepts only .iso images and the storage "local-lvm (pve)" has the button "Upload" blocked:
The disk image that you see on the screenshot "vm-242-disk-1.raw" is the image that was created by ProxMox automatically, when I have chosen storage for the virtual machine "242" to be "local-lvm (pve)".
Notice that ProxMox didn't ask me to choose the image "vm-242-disk-1.raw", but it has created this file on it's own (probably filled with zeros). I'd like to replace that empty file with my own image "vm.raw", but I don't know where the file "vm-242-disk-1.raw" is located. Furthermore, I don't know how to upload my image file "vm.raw" on ProxMox machine - there is too little space on the usual file system for my file "vm.raw" and I don't know how to upload my file to a bigger storage "local-lvm (pve)" via scp. I cannot upload my file to folder "/tmp/my_svm/vm.raw", because of the lack of space. Even if I could upload my file there, I don't know how to transfer it from "/tmp/my_svm/vm.raw" to the storage "local-lvm (pve)". Even if I could transfer "vm.raw" to the storage "local-lvm (pve)", I don't know how to attach the file "vm.raw" to my virtual machine "242", so that the virtual machine will load linux from the file "vm.raw" when started in web console.
В этой небольшой инструкции мы рассмотрим пример перевода диска из формата raw, который по умолчанию применяется в Proxmox, в vmdk для запуска виртуальной машины на VMware. Мы обойдемся без некоторых подробностей, связанных с работой с данными гипервизорами.
- Доступы к гипервизорам по SSH.
- Достаточно пространства для новых дисков.
- Доступ к Proxmox по веб-интерфейсу (не обязательно).
- Сетевая доступность между серверами Proxmox и VMware (желательно).
* в данном примере нам нужно будет конвертировать диск vm-101-disk-0.
Получить любую информацию о виртуальной машине в Proxmox можно и в командной строке:
* где 101 — идентификатор виртуальной машины.
В моем случае меня интересует:
Теперь давайте найдем, в какой директории на сервере находится данный диск:
find / -name vm-101-disk-0*
* в нашем примере мы ищем vm-101-disk-0.
Мы будем работать с данным путем. Приступаем к конвертации:
qemu-img convert -f raw /dev/pve/vm-101-disk-0 -O vmdk /tmp/vm-101-disk-0.vmdk
* в данном примере мы будем преобразовывать наш диск /dev/pve/vm-101-disk-0 из формата raw в vmdk. Новый диск будет сохранен по пути /tmp/vm-101-disk-0.vmdk.
Очень важно заранее убедиться в наличие свободного места по пути, куда мы пытаемся сохранить диск нового формата. В противном случае, команда вылетит с ошибкой.
В зависимости от размера диска, процесс может занять много времени. После того, как конвертация закончится, необходимо перенести файл с новым диском на целевой сервер с VMware. Надежнее всего это сделать с использованием утилиты scp:
scp /tmp/vm-101-disk-0.vmdk 192.168.0.15:/vmfs/volumes/disk1
- /tmp/vm-101-disk-0.vmdk — сконвертированный диск.
- 192.168.0.15 — IP-адрес сервера VMware.
- /vmfs/volumes/disk1 — путь на сервере VMware, где нужно сохранить новый диск.
Посмотреть на сервере VMware список носителей и свободное на них пространство можно командой:
Помимо scp, мы можем попробовать использовать графические интерфейсы для скачивания и загрузки диска. Однако, если работать с большими файлами, такой способ может оказаться ненадежным (обрыв соединения и ограничения со стороны графического инструментария).
Последнее, что необходимо сделать для преобразования диска — клонировать его с преобразованием в формат Thin Provision. Это значить, что диск будет ещё раз продублирован, и для этого потребуется дисковое пространство.
И так, выполняем команду:
vmkfstools -i /vmfs/volumes/disk1/vm-101-disk-0.vmdk /vmfs/volumes/disk1/vmware_vm_thin-disk-0.vmdk -d thin
* где /vmfs/volumes/disk1/vm-101-disk-0.vmdk — путь к диску, который мы перенесли с Proxmox; /vmfs/volumes/disk1/vmware_vm_thin-disk-0.vmdk — новый файл уже в формате Thin Provision.
Готово. Для проверки диска создаем виртуальную машину и подключаем к ней наш новый диск. На запущенную машину устанавливаем VMware Tools.
После того, как мы закончили работу, не забываем удалить все старые файлы, так как они могут много весить.
Не вполне стандартные задачи, с которыми мне приходится сталкиваться по работе и способы их решения.
Виртуальные машины Qemu/KVM
Руководство администратора Proxmox VE R 6.0 Глава 10.3-7.
Миграция
- Онлайн-миграция (она же живая миграция)
- Offline Миграция
Онлайн-Миграция
Когда ваша виртуальная машина запущена и у нее нет определенных локальных ресурсов (таких как диски в локальном хранилище, передаваемые через устройства и т. д.) вы можете инициировать динамическую миграцию с флагом-online.
Как это работает
Это запускает процесс Qemu на целевом хосте с флагом incoming, что означает, что процесс запускается и ожидает данных памяти и состояний устройства от исходной виртуальной машины (так как все другие ресурсы, например диски, являются общими, содержимое памяти и состояние устройства-единственные вещи, оставшиеся для передачи).
- Виртуальная машина не имеет локальных ресурсов (например, проброшенные устройства, локальные диски и т. д.).
- Хосты находятся в одном кластере Proxmox VE.
- Хосты имеют работающее (и стабильное) сетевое соединение.
- Целевой хост должен иметь те же или более высокие версии пакетов Proxmox VE. (Это может работать и в другую сторону, но результат не гарантируется)
Offline Миграция
среда, 11 марта 2020 г.
Копии и клоны
Установка виртуальной машины обычно выполняется с помощью установочного носителя (CD-ROM) от поставщика операционной системы. В зависимости от операционной системы, это может быть трудоемкой задачей, которую можно избежать.
Полный Клон
Результатом такой копии является независимая виртуальная машина. Новая виртуальная машина не имеет общих ресурсов хранения с исходной.
Связанный Клон
Современные драйверы хранения поддерживают способ генерирования быстро связанных клонов. Такой клон - это записываемая копия, исходное содержимое которой совпадает с исходными данными. Создание связанного клона происходит практически мгновенно и изначально не требует дополнительного пространства.
Они называются связанными, потому что новый образ все еще ссылается на оригинал. Немодифицированные блоки данных считываются из исходного изображения, но изменения записываются (а затем считываются) из нового места. Эта техника называется "Copy-on-write" (копирование на запись).
Для этого требуется, чтобы исходный том был доступен только для чтения. С помощью Proxmox VE можно преобразовать любую виртуальную машину в шаблон только для чтения). Такие шаблоны впоследствии могут быть использованы для эффективного создания связанных клонов. На заметку Вы не можете удалить исходный шаблон, пока существуют связанные клоны. Изменить целевое хранилище для связанных клонов невозможно, поскольку это внутренняя функция хранилища.
Параметр целевой узел позволяет создать новую виртуальную машину на другом узле. Единственное ограничение заключается в том, что виртуальная машина находится в общем хранилище, и это хранилище также доступно на целевом узле.
Шаблоны виртуальных машин
Идентификатор поколения виртуальной машины
Proxmox VE поддерживает Virtual Machine Generation ID (vmgenid) 15 для виртуальных машин. Он может быть использован гостевой операционной системой для обнаружения любого события, приводящего к событию сдвига времени, например, восстановления резервной копии или отката моментального снимка.
При создании новых виртуальных машин, vmgenid виртуальной машины будет автоматически сгенерирован и сохранен в файле конфигурации.
Чтобы создать и добавить vmgenid к уже существующей виртуальной машине, можно передать специальное значение ‘1’, чтобы позволить Proxmox VE автоматически сгенерировать vmgenid или вручную установить UUID 16 , используя его в качестве значения, например: На заметку Первоначальное добавление устройства vmgenid к существующей виртуальной машине может привести к тем же последствиям, что и изменение отката моментального снимка, восстановления резервной копии и т. д., поскольку ВМ может интерпретировать это как изменение поколения. В редких случаях, когда механизм vmgenid не требуется, можно передать '0' для его значения при создании виртуальной машины или удалить задним числом свойство в конфигурации с помощью: Наиболее распространенным вариантом использования vmgenid являются более новые операционные системы Microsoft Windows, которые используют его, чтобы избежать проблем с чувствительными ко времени или реплицируеми службами (например, базы данных, контроллер домена 17 ) при откате моментального снимка, восстановлении резервной копии или всей операции клонирования виртуальной машины.
Импорт виртуальных машин и образов дисков
Экспорт виртуальной машины из внешнего гипервизора обычно выполняется в виде одного или нескольких образов диска с конфигурационным файлом, описывающим параметры виртуальной машины (ОЗУ, количество ядер).
Образы дисков могут быть в формате vmdk, если диски поступают из VMware или VirtualBox, или qcow2, если диски поступают из гипервизора KVM. Наиболее популярным форматом конфигурации для экспорта виртуальных машин является стандарт OVF, но на практике взаимодействие ограничено, поскольку многие настройки не реализованы в самом стандарте, а гипервизоры экспортируют дополнительную информацию в нестандартные расширения.
Помимо проблемы форматирования, импорт образов дисков из других гипервизоров может завершиться неудачей, если эмулируемое оборудование слишком сильно меняется от одного гипервизора к другому. Виртуальные машины Windows особенно чувствительны к этому, так как ОС очень придирчива к любым изменениям оборудования. Эта проблема может быть решена путем установки утилиты MergeIDE.zip доступной в интернете, перед экспортом и выбором типа жесткого диска IDE, перед загрузкой импортированной виртуальной машины Windows.
Наконец, возникает вопрос о паравиртуализированных драйверах, которые повышают скорость эмулируемой системы и специфичны для гипервизора. GNU/Linux и другие свободные ОС Unix имеют все необходимые драйверы, установленные по умолчанию, и вы можете переключиться на паравиртуализированные драйверы сразу после импорта виртуальной машины. Для виртуальных машин Windows вам необходимо самостоятельно установить паравиртуализированные драйверы Windows.
Пошаговый пример импорта Windows OVF
Microsoft предоставляет виртуальные машины для загрузки, для быстрого старта разработчиков Windows. Мы собираемся использовать один из них, чтобы продемонстрировать функцию импорта OVF.
После получения информации о пользовательском соглашении выберите Windows 10 Enterprise (Evaluation-Build) для платформы VMware и загрузите zip.
Извлеките образ диска из архива zip
Используя утилиту unzip или любой архиватор по вашему выбору, распакуйте zip и скопируйте через ssh/scp файлы ovf и vmdk на ваш хост Proxmox VE.
Импорт виртуальной машины
Добавление образа внешнего диска к виртуальной машине
Вы также можете добавить в виртуальную машину существующий образ диска, полученный из внешнего гипервизора или созданный вами.
Читайте также: