본문 바로가기

클라우드 운영 팁

가상 머신이 이상하다면? 간단히 OS 디스크만 교체하면 끝 ~ VM 백업과 복구 참 쉽습니다.

가상 머신(VM)에 장애나 보안 사고 등 복잡한 문제가 생기면? 기존 환경을 지우고 운영체제를 다시 설치하거나, 백업본을 불러와 복원을 합니다. 마이크로소프트 애저(Azure) 환경에서는 이게 매우 간단합니다. 애저에서 매니지드 가상 머신을 사용하는 경우 VM에 치명적인 문제가 발생했을 때 VM을 지울 필요 없이 간단하게 OS 디스크만 바꾸어 주면 됩니다. 이 기능의 정식 명칭은 'OS Disk Swap'인데요, 말 그대로 OS 디스크를 바꾸어 주는 기능입니다. 


이 기능을 이용하면 VM을 삭제하지 않고 이전에 백업 받아 둔 OS 디스크를 간단히 복원할 수 있고, 필요에 따라 새로운 OS 디스크 이미지를 쉽게 연결할 수 있습니다. 이 기능을 쓰려면 VM을 잠시 멈추고 매니지드 OS 디스크의 리소스 ID만 바꾸면 됩니다. 제약이 있는데, 당연한 말이지만 리눅스가 설치된 OS 디스크를 윈도우가 설치된 것으로 바꿀 수는 없습니다. 간단히 디스크 OS를 바꾸는 방법을 소개합니다. 

애저 CLI를 이용할 경우 다음과 같이 하면 됩니다. 참고로 애저 CLI 버전은 2.0.25 이상이어야 합니다. 

az vm update –g osrg -n vm2 --os-disk /subscriptions/<sub-id>/resourceGroups/osrg/providers/Microsoft.Compute/disks/osbackup


파워쉘을 이용할 때는 다음과 같이 합니다. 


$vm = Get-AzureRmVM -ResourceGroupName osrg -Name vm2 $disk = Get-AzureRmDisk -ResourceGroupName osrg -Name osbackup Set-AzureRmVMOSDisk -VM $vm -ManagedDiskId $disk.Id -Name $disk.Name  

Update-AzureRmVM -ResourceGroupName osrg -VM $vm


자바 SDK를 이용한 예는 다음과 같습니다. 

VirtualMachine virtualMachine = azure.virtualMachines().getById("<vm_id>");
virtualMachine .inner() .storageProfile() .osDisk() .withName("<disk-name>") .managedDisk() .withId("<disk_resource_id>"); virtualMachine.update() .apply();


다음은 GO SDK를 사용한 예입니다.


func UpdateVM(ctx context.Context, vmName string, diskId string, diskName string) (vm compute.VirtualMachine, err error) {

vm, err = GetVM(ctx, vmName) if err != nil { return } vm.VirtualMachineProperties.StorageProfile.OSDisk.Name = diskName vm.VirtualMachineProperties.StorageProfile.ManagedDisk.Id = diskId vmClient := getVMClient() future, err := vmClient.CreateOrUpdate(ctx, helpers.ResourceGroupName(), vmName, vm) if err != nil { return vm, fmt.Errorf("cannot update vm: %v", err) } err = future.WaitForCompletion(ctx, vmClient.Client) if err != nil { return vm, fmt.Errorf("cannot get the vm create or update future response: %v", err) } return future.Result(vmClient) }