5.19.2.2 方法2: 個々のユーザー・ドメインのバックアップ

/EXAVMIMAGESファイル・システム内の特定のフォルダをバックアップすることで、個々のユーザー・ドメインをバックアップできます。

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

  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 
    
    printf "Enter the name of the user domains to be backed up :"
    read userDomainName
    
    ##  Create the Backup Directory 
    
    mkdirStartTime=$(date +%s)
    find /EXAVMIMAGES/GuestImages/${userDomainName} -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" 
    
    ##  Pause the user domain
    PauseStartTime=$(date +%s)
    xm pause ${userDomainName}
    PauseEndTime=$(date +%s)
    PauseTime=$(expr ${PauseEndTime} - ${PauseStartTime})
    echo "PauseTime for guest - ${userDomainName} :" ${PauseTime}" seconds" 
    
    ## Create reflinks for all the files in /EXAVMIMAGES/GuestImages/${userDomainName}
    relinkStartTime=$(date +%s)
    find /EXAVMIMAGES/GuestImages/${userDomainName} -type f|awk '{print "reflink",$0,"/EXAVMIMAGES/Backup"$0}'|sh
    relinkEndTime=$(date +%s)
    reflinkTime=$(expr ${relinkEndTime} - ${relinkStartTime})
    echo "Reflink creation time for guest - ${userDomainName} :" ${reflinkTime}" seconds" 
    
    ## Unpause the user domain
    unPauseStartTime=$(date +%s)
    xm unpause ${userDomainName}
    unPauseEndTime=$(date +%s)
    unPauseTime=$(expr ${unPauseEndTime} - ${unPauseStartTime})
    echo "unPauseTime for guest - ${userDomainName} :" ${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を削除します。