5.19.2.1 方法1: すべてのユーザー・ドメインをバックアップする

/EXAVMIMAGES OCFS2ファイル・システムであるストレージ・リポジトリをバックアップすることで、すべてのユーザー・ドメインをバックアップできます。

バックアップ先は、書込み可能なNFSの場所など、ローカル・マシンの外部に存在するようにし、バックアップを保持できる十分な大きさにする必要があります。バックアップに必要な領域は、システムにデプロイされるOracle VMの数に比例し、最大約1.6TBです。

この手順では、管理ドメインごとに15個以下のユーザー・ドメインがあることを前提としています。

  1. 次のスクリプトを使用して、バックアップ先を準備し、バックアップするユーザー・ドメインを準備します。
    ScriptStarttime=$(date +%s)
    printf "This script is going to remove the directory /EXAVMIMAGES/Backup.
    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
    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
    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 "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" 
    
    ##  Pause the user domains
    for hostName in $(xm list|egrep -v '^Domain-0|^Name'|awk '{print $1}')
    do
    PauseStartTime=$(date +%s)
    xm pause ${hostName}
    PauseEndTime=$(date +%s)
    PauseTime=$(expr ${PauseEndTime} - ${PauseStartTime})
    echo "PauseTime 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 "reflink",$0,"/EXAVMIMAGES/Backup"$0}'|sh
    relinkEndTime=$(date +%s)
    reflinkTime=$(expr ${relinkEndTime} - ${relinkStartTime})
    echo "Reflink creation time for guest - ${hostName} :" ${reflinkTime}" seconds" 
    
    ## Unpause the user domains
    unPauseStartTime=$(date +%s)
    xm unpause ${hostName}
    unPauseEndTime=$(date +%s)
    unPauseTime=$(expr ${unPauseEndTime} - ${unPauseStartTime})
    echo "unPauseTime for guest - ${hostName} :" ${unPauseTime}" seconds" 
    
    ScriptEndtime=$(date +%s) 
    ScriptRunTime=$(expr ${ScriptEndtime} - ${ScriptStarttime}) 
    echo "ScriptRunTime ${ScriptRunTime} seconds"
  2. スナップショットのバックアップを作成します。

    ステップ1のスクリプトで作成された/EXAVMIMAGES/Backupディレクトリ内のreflinkファイルをリモートの場所にバックアップします。次に例を示します:

    1. /EXAVMIMAGES/Backupの下のすべてのファイルで構成されるtarballファイルを作成します。
    2. tarballをリモートの場所にコピーします。

    これにより、管理ドメイン(Dom0)が恒久的に失われたり破損した場合にリストア操作が可能になります。

  3. スクリプトによって作成されたreflinkを削除します。