6.10.2.1 方法1: すべてのKVMゲストのバックアップ
/EXAVMIMAGESの下にある記憶域リポジトリをバックアップすることで、すべてのゲストをバックアップできます。
バックアップ先は、書込み可能なNFSの場所など、KVMホスト・サーバーとは別の場所で、バックアップを保持できる十分な大きさにする必要があります。バックアップに必要な領域は、システムにデプロイされるゲストの数に比例します。各ゲストのバックアップに必要な領域は、約200GBです。
- ゲスト・イメージを準備します。
次のスクリプトを使用して、
/EXAVMIMAGES/Backupの下で、ゲスト・イメージのバックアップを準備します。#!/bin/bash ScriptStarttime=$(date +%s) printf "This script is going to remove the directory /EXAVMIMAGES/Backup if it exists. If that is not acceptable, exit the script by typing n, manually remove /EXAVMIMAGES/Backup and come back to rerun the script. Otherwise, press y to continue :" read proceed if [[ ${proceed} == "n" ]] || [[ ${proceed} == "N" ]] then exit 0 elif [[ ${proceed} != "n" ]] && [[ ${proceed} != "N" ]] && [[ ${proceed} != "y" ]] && [[ ${proceed} != "Y" ]] then echo "Invalid input" exit 1 fi rm -rf /EXAVMIMAGES/Backup ## Create the Backup Directory mkdirStartTime=$(date +%s) find /EXAVMIMAGES -type d|grep -v 'lost+found'| awk '{print "mkdir -p /EXAVMIMAGES/Backup"$1}'|sh mkdir -p /EXAVMIMAGES/Backup/XML mkdirEndTime=$(date +%s) mkdirTime=$(expr ${mkdirEndTime} - ${mkdirStartTime}) echo "Backup Directory creation time :" ${mkdirTime}" seconds" ## Create reflinks for files not in /EXAVMIMAGES/GuestImages relinkothesStartTime=$(date +%s) find /EXAVMIMAGES/ -not -path "/EXAVMIMAGES/GuestImages/*" -not -path "/EXAVMIMAGES/Backup/*" -type f|awk '{print "cp --reflink",$0,"/EXAVMIMAGES/Backup"$0}'|sh relinkothesEndTime=$(date +%s) reflinkothesTime=$(expr ${relinkothesEndTime} - ${relinkothesStartTime}) echo "Reflink creation time for files other than in /EXAVMIMAGES/GuestImages :" ${reflinkothesTime}" seconds" cp /etc/libvirt/qemu/*.xml /EXAVMIMAGES/Backup/XML for hostName in $(virsh list|egrep -v 'Id|^-'|awk '{print $2}'|sed '/^$/d') do ## Pause the guests PauseStartTime=$(date +%s) virsh suspend ${hostName} PauseEndTime=$(date +%s) PauseTime=$(expr ${PauseEndTime} - ${PauseStartTime}) echo "SuspendTime for guest - ${hostName} :" ${PauseTime}" seconds" ## Create reflinks for all the files in /EXAVMIMAGES/GuestImages relinkStartTime=$(date +%s) find /EXAVMIMAGES/GuestImages/${hostName} -type f|awk '{print "cp --reflink", $0,"/EXAVMIMAGES/Backup"$0}'|sh relinkEndTime=$(date +%s) reflinkTime=$(expr ${relinkEndTime} - ${relinkStartTime}) echo "Reflink creation time for guest - ${hostName} :" ${reflinkTime}" seconds" ## Unpause the guest unPauseStartTime=$(date +%s) virsh resume ${hostName} unPauseEndTime=$(date +%s) unPauseTime=$(expr ${unPauseEndTime} - ${unPauseStartTime}) echo "ResumeTime for guest - ${hostName} :" ${unPauseTime}" seconds" done ScriptEndtime=$(date +%s) ScriptRunTime=$(expr ${ScriptEndtime} - ${ScriptStarttime}) echo ScriptRunTime ${ScriptRunTime}" seconds" - ゲスト・イメージのバックアップを作成します。
/EXAVMIMAGES/Backupの下のすべてのreflinkファイルをリモートの場所にバックアップします。KVMホストが恒久的に破損したり紛失した場合は、バックアップを使用してリストアできます。次に例を示します:
# mkdir -p /remote_FS # mount -t nfs -o rw,intr,soft,proto=tcp,nolock ip_address:/nfs_location/ /remote_FS # cd /EXAVMIMAGES/Backup # tar --acls --xattrs --xattrs-include=* --format=pax -pjcvf /remote_FS/exavmimages.tar.bz2 * > /tmp/exavmimages_tar.stdout 2> /tmp/exavmimages_tar.stderrmountコマンドで、ip_addressはNFSサーバーのIPアドレス、nfs_locationはバックアップを保持するNFSの場所です。バックアップの完了後に、
tarコマンドから、重大なエラーがないかを確認します。前述の例では、tarコマンドは、/tmp/exavmimages_tar.stderrのファイルにエラーを書き込みます。 /EXAVMIMAGES/Backupディレクトリとその内容を削除します。次に例を示します:
# cd / # rm -rf /EXAVMIMAGES/Backup- NFSバックアップの場所をアンマウントして、マウント・ポイント・ディレクトリを削除します。
次に例を示します:
# umount /remote_FS # rmdir /remote_FS
親トピック: Oracle Linux KVMゲストのバックアップ