GNU/Linux >> Linux の 問題 >  >> Linux

LinuxでKVM仮想マシンをエクスポートおよびインポートする方法

この記事では、KVM仮想マシンのディスクと構成をエクスポートし、後でそれらを同じマシンまたは別のマシンにインポートする手順について説明します。また、Bashスクリプトを使用してKVM仮想マシンをエクスポートおよびインポートする方法についても説明します。

はじめに

最近、ハイパーバイザーを Oracle VirtualBoxから切り替えました KVMへ そのネイティブ機能とパフォーマンスのために。私がテストした限りでは、KVM仮想マシンはVirtualboxVMと比較して高速に実行されています。

VMを定期的にバックアップすることは常に重要です。したがって、不一致がある場合は、バックアップイメージを使用して仮想マシンを復元できます。 KVM仮想マシンのエクスポートとインポートは2段階のプロセスです。

  • まず、ディスクイメージが保存されている場所を確認し、ディスクイメージをバックアップ場所にコピーする必要があります。
  • 次に、マシン構成をエクスポートして、後でドメインの作成に使用できるようにします。

仮想マシンの定義

仮想マシンのドメイン情報を取得するには、2つの方法があります。 「Virsh」を使用することもできます プログラムするか、 "Virt-manager"を使用します 。

VMの名前は、Virt-managerから取得するか、次の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

次のコマンドを実行して、特定の仮想マシンに関するドメイン情報全体(VM構成)を表示できます。これにより、結果が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形式で取得できます。 [仮想ハードウェアの表示]セクションの下。

仮想マシンのディスクの場所

仮想マシンのディスクはqcow2で作成されます フォーマット。デフォルトでは、仮想マシンディスクは/var/lib/libvirt/images/に保存されます ディスクを別のディレクトリに明示的に保存していない限り、ディレクトリ。

次のコマンドを実行して、ディスクディレクトリパスを取得します。

$ virsh dumpxml ubuntu20.04-clone | grep -i "source"
      <source file='/var/lib/libvirt/images/ubuntu20.04-clone.qcow2'/>

Virt-managerから、概要の下 セクションで、<disk>を確認します セクション。

異なるパスを使用してディスクイメージを保存していて、すべてのVMディスクパスを知りたい場合は、ターミナルまたはシェルスクリプトから次のスニペットを実行できます。

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 

ドメイン情報のエクスポートとディスクのコピー

ディスクパスとドメイン情報を取得する方法がわかったので、VMのドメイン情報をエクスポートし、ディスクイメージを別の場所にコピーします。

ドメイン情報をエクスポートするには、次の「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ユーザーが所有しているため、user。

KVM仮想マシンのインポート

KVM仮想マシンをインポートするには、次のコマンドを実行して、エクスポートされたXMLファイルからドメインを定義する必要があります。

$ virsh define --file <path-to-xml-file>
$ virsh define –file ~/Documents/ubuntu.xml

これで、Virt-managerを確認するか、virshを実行できます。 コマンドを実行すると、ドメインが正常に作成されます。 XMLファイルで定義されているディレクトリパスにディスクイメージをコピーする必要があります。私の場合、これはデフォルトの場所です/var/lib/libvirt/images/

$ sudo cp ~/Documents/ubuntu20.04-clone.qcow2 /var/lib/libvirt/images/

インポートプロセスが完了しました。これで、仮想マシンを起動できます。

KVM仮想マシンをエクスポートおよびインポートするためのBashスクリプト

すべての構成イメージとディスクイメージのエクスポートを処理する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」を実行します "すべての構成をエクスポートするコマンド。

次の画像は、エクスポートの仕組みを示しています。

import」を渡すと "引数として、最初にディスクイメージをデフォルトの場所/var/lib/libvirt/にコピーします 「virsh define」を実行します "すべてのエクスポートXMLファイルに対するコマンド。

$ sudo bash kvm_export_import.sh import

結論

この記事では、KVM仮想マシンをエクスポートして同じマシンまたは別のマシンにインポートする方法を説明しました。仮想マシンを最初から構築することは、時間のかかる作業です。したがって、どのような状況でも画像が失われるのを防ぐために従うべき適切な戦略。この記事のコツやヒントがあれば、ぜひお聞かせください。

これがお役に立てば幸いです。


Linux
  1. RedhatLinuxでKVMベースの仮想マシンを削除する方法

  2. RedhatLinuxでKVMベースの仮想マシンのクローンを作成する方法

  3. Quickemu – Windows、macOS、およびLinux仮想マシンを実行します

  1. LinuxでMySQLデータベースをインポートおよびエクスポートする方法

  2. CloudFlareでDNS設定をエクスポートおよびインポートする方法

  3. Linux KVM 仮想マシンにメモリ、vCPU、ハードディスクを追加する方法

  1. コマンドラインを介してKVM仮想マシンを作成および管理する方法

  2. ManjaroおよびArchLinuxにVirtualMachineManager(KVM)をインストールする方法

  3. Virt-Managerを使用してKVM仮想マシンを管理する方法