オンプレ環境を移行すると、ともするとネットワーク経由で、例えばrsyncやscpを使ってコピーしがちだけれども、スナップショットを使ってコピーした方が数千倍高速(なはず)。
#!/bin/bash
readonly myRegion="japaneast"
readonly myResourceGroup="MyGroup"
readonly sourceVM="gitreplica"
readonly sourceVMURL="$sourceVM.$myRegion.cloudapp.azure.com"
readonly sourceUser="user"
readonly targetVM="gitbuild"
readonly targetVMURL="$targetVM.$myRegion.cloudapp.azure.com"
readonly targetUser="user"
readonly mntPos="/media/source/"
readonly repoDir=$mntPos"mirror/"
#DataDiskは1つであることが前提、基本的に変更されないのでこれも毎回実行する必要は無い
#1. sourceのDataDiskのIDを取得
datadiskid=$(az vm show -g $myResourceGroup -n $sourceVM --query "storageProfile.dataDisks[0].managedDisk.id" -o tsv)
# echo $datadiskid
#2. DataDiskのスナップショットを取得する
snapshotname="$sourceVM-snapshot-$(date +%s)"
az snapshot create -g $myResourceGroup --source "$datadiskid" --name $snapshotname --sku Premium_LRS
#3. スナップショットをtargetにアタッチする
az disk create -g $myResourceGroup --name $snapshotname-disk --source $snapshotname
az vm disk attach -g $myResourceGroup --vm-name $targetVM --disk $snapshotname-disk --sku Premium_LRS --caching ReadWrite
#4. アタッチされたディスクをマウントする
ssh $targetUser@$targetVMURL "sudo mount /dev/sdc1 $mntPos"
#5. 何かしらの処理を行う
#
#6. ディスクをデタッチする
ssh $targetUser@$targetVMURL "sudo umount $mntPos"
az vm disk detach -g $myResourceGroup --vm-name $targetVM --name $snapshotname-disk
#8. ディスク・スナップショットを消去
az disk delete -g $myResourceGroup --name $snapshotname-disk --yes
az snapshot delete -g $myResourceGroup --name $snapshotname