Экспорт и импорт виртуальных машин KVM в Linux
В этой статье я расскажу вам, как экспортировать диск и конфигурации виртуальной машины KVM, а затем импортировать их на тот же или другой компьютер. Я также покажу вам, как экспортировать и импортировать виртуальные машины KVM с помощью сценария Bash.
Введение
Недавно я сменил свой гипервизор с Oracle VirtualBox на KVM из-за его собственных функций и производительности. Насколько я тестировал, виртуальные машины KVM работают быстрее по сравнению с виртуальными машинами Virtualbox.
Всегда важно периодически создавать резервные копии виртуальных машин. Поэтому в случае каких-либо несоответствий вы можете использовать резервную копию для восстановления виртуальной машины. Экспорт и импорт виртуальных машин KVM — это двухэтапный процесс.
- Сначала вам необходимо проверить, где хранятся образы дисков, и скопировать образ диска в резервное хранилище.
- Во-вторых, экспортируйте конфигурации машины, чтобы их позже можно было использовать для создания домена.
Определение виртуальной машины
Существует два способа получить информацию о домене виртуальной машины. Вы можете использовать либо программу Вирш, либо Вирт-менеджер.
Имя виртуальной машины можно получить из вирт-менеджера или выполнив следующую команду virsh
.
virsh list --all
Id Name State
------------------------------------
- Linux_Mint_20 shut off
- mxlinux shut off
- popos_21_10 shut off
- rocky_linux_8 shut off
- ubuntu20.04 shut off
- ubuntu20.04-clone shut off
Вы можете запустить следующую команду, чтобы просмотреть всю информацию о домене (конфигурацию виртуальной машины) о конкретной виртуальной машине. Это отобразит результат в формате XML.
virsh dumpxml vm_name | less
virsh dumpxml ubuntu20.04-clone | less
Вы также можете получить конкретную конфигурацию машины, передав ее команде grep. Допустим, если вы хотите просмотреть распределение памяти, вы можете запустить следующую команду.
virsh dumpxml ubuntu20.04-clone | grep -i "MEMORY"
<memory unit='KiB'>5632000</memory>
<currentMemory unit='KiB'>5632000</currentMemory>
Если вы предпочитаете Virt-manager, вы можете получить эту информацию в формате XML, нажав вкладка XML в разделе «показать виртуальное оборудование».
Показать информацию о домене в Virt Manager
Расположение диска виртуальной машины
Диски виртуальной машины создаются в формате qcow2
. По умолчанию диск виртуальной машины хранится в каталоге /var/lib/libvirt/images/
, если только вы явно не сохранили диск в отдельном каталоге.
Выполните следующую команду, чтобы получить путь к каталогу диска.
virsh dumpxml ubuntu20.04-clone | grep -i "source"
<source file='/var/lib/libvirt/images/ubuntu20.04-clone.qcow2'/>
В Virt-менеджере в разделе Обзор проверьте наличие раздела <disk>
.
Расположение диска
Если вы использовали разные пути для хранения образов дисков и хотите узнать все пути к дискам виртуальной машины, вы можете запустить следующий фрагмент из терминала или из сценария оболочки.
VM_NAMES=($(virsh list --all| awk '(NR>2)' | awk '{ print $2 }'))
for VM in ${VM_NAMES[@]}; do
DISK_PATH=$(virsh dumpxml ${VM} | grep -i "<source file")
echo "${VM} ${DISK_PATH}"
done | column -t
Отображение путей к диску виртуальной машины с помощью сценария
Экспорт информации о домене и копирование диска
Теперь вы знаете, как получить путь к диску и информацию о домене. Пришло время экспортировать информацию о домене для виртуальной машины и скопировать образ диска в другое место.
Чтобы экспортировать информацию о домене, вы можете запустить следующую команду «virsh dumpxml
» и сохранить выходные данные в файле XML
.
virsh dumpxml vm-name > /path/to/xm_file.xml
virsh dumpxml ubuntu20.04-clone > ~/Documents/ubuntu.xml
Теперь скопируйте образ диска в другое место, которое можно будет использовать позже.
sudo cp /var/lib/libvirt/images/ubuntu20.04-clone.qcow2 ~/Documents/
Процесс экспорта завершен. Это так просто!
Внимание! Вам следует использовать sudo
или скопировать диск с пользователем root
, поскольку диск принадлежит пользователю root.
Отображать информацию о владельце
Импортировать виртуальную машину KVM
Чтобы импортировать виртуальную машину KVM, вам необходимо определить домен из экспортированного XML-файла, выполнив следующую команду.
virsh define --file <path-to-xml-file>
virsh define -file ~/Documents/ubuntu.xml
Теперь можно проверить вирт-менеджер или запустить команду virsh
, домен должен быть успешно создан. Вам необходимо скопировать образ диска в путь к каталогу, определенный в XML-файле. В моем случае это местоположение по умолчанию /var/lib/libvirt/images/
.
sudo cp ~/Documents/ubuntu20.04-clone.qcow2 /var/lib/libvirt/images/
Процесс импорта завершен. Теперь вы можете запустить виртуальную машину.
Скрипт Bash для экспорта и импорта виртуальных машин KVM
Я создал сценарий bash, который позаботится об экспорте всей конфигурации и образов дисков. Если вам интересно, вы можете посмотреть этот скрипт в моем репозитории GitHub. Ваши предложения по улучшению этого сценария будут высоко оценены.
#!/usr/bin/env bash
----------------------------------------------------------------------------------------------------
AUTHOR : KARTHICK S
PURPOSE : THIS SCRIPT WILL EXPORT/IMPORT THE CONFIG AND VM DISK.
#
usage:
export function will take care of exporting the necessary for all VM. Run as "<scriptname.sh> export"
import function will take care of importing the necessary for all VM. Run as "<scriptname.sh> import"
#
NOTE: Do not add trailing / for the directory when giving export and import path.
#------------------------------------------------------------------------------------------------------
Trigger the script with root user or exit.
if [[ ${UID} -ne 0 ]]; then
echo -e "[EXIT] - Run the script as root user or with sudo privilege..."
exit
fi
function export_vm(){
# Get the export location.
read -p "Provide the directory path where disk and config files to be exported: " EXPORT_LOCATION
# Create the destination directory if not exists.
[[ -d ${EXPORT_LOCATION} ]] || mkdir -p ${EXPORT_LOCATION}
# Exporting the config using virsh dumpxml command.
VM_NAMES=($(virsh list --all| awk '(NR>2)' | awk '{ print $2 }'))
for VM in ${VM_NAMES[@]}; do
virsh dumpxml ${VM} > ${EXPORT_LOCATION}/${VM}.xml
done
# Using rsync copy the entire directory from default location.
echo -e "\n[ Copying disk images ]\n" && sudo rsync -avxp --progress /var/lib/libvirt/images ${EXPORT_LOCATION}
echo -e "\n[ Exported Files ] \n" && ls -lR ${EXPORT_LOCATION}
}
function import_vm(){
# Get the source location.
read -p "Provide the directory path where disk and config files are stored: " SOURCE_LOCATION
# Throws error if directory is not available and exit.
[[ -d ${SOURCE_LOCATION} ]] || { echo "Directory not available"; exit 1 ; }
# Copy all the files to default disk location.
echo -e "[ Copying disk images ]\n" && sudo rsync -avxp --progress ${SOURCE_LOCATION}/images /var/lib/libvirt/
if [[ $? -eq 0 ]]; then
# Define VM
echo -e "\n[ Defining VM ]\n"
for XML_FILE in ${SOURCE_LOCATION}/*.xml; do
virsh define --file ${XML_FILE}
done
echo -e "\n[ Imported VM List ]\n" && virsh list --all
fi
}
case $1 in
export ) export_vm ;;
import ) import_vm ;;
*) echo -e "USAGE :
kvm_export_import.sh export - Export config and disk
kvm_export_import.sh import - Define VM and copy the disk"; exit
esac
Использование этого скрипта заключается в следующем.
Вы можете запустить следующую команду, чтобы клонировать суть из GitHub.
git clone https://gist.github.com/d6c671597592fe5634a39b7974bc8029.git
Скрипт выполняет резервное копирование (т. е. экспорт), а также восстановление (т. е. восстановление).
Давайте экспортируем виртуальную машину KVM, используя этот скрипт, как показано ниже.
sudo bash kvm_export_import.sh export
Вам необходимо указать путь к каталогу, в который нужно скопировать/экспортировать XML-файл и образ диска. Не добавляйте косую черту /
при указании каталога экспорта. Сначала он скопирует образ диска (.qcow2
) и запустит команду «virsh dumpxml
» для экспорта всех конфигураций.
На изображении ниже показано, как работает экспорт.
Экспорт виртуальной машины KVM с помощью сценария Bash
Когда вы передаете «import
» в качестве аргумента, он сначала скопирует образ диска в папку по умолчанию /var/lib/libvirt/
и запустит «virsh define
» для всех экспортируемых XML-файлов.
sudo bash kvm_export_import.sh import
Импортируйте виртуальную машину KVM с помощью сценария Bash
Заключение
В этой статье я показал вам, как экспортировать виртуальную машину KVM и импортировать ее на ту же или другую машину. Создание виртуальной машины с нуля — трудоемкая задача. Итак, правильная стратегия, которой следует придерживаться, чтобы защитить изображения от потери в любой ситуации. Если у вас есть какие-либо хитрости или советы для этой статьи, мы будем рады услышать их от вас.