최근에 문제가 발생해서 Hyper-V에서 제공하는 스냅샷을 작업스케줄을 통해서 새벽시간에 1일 1회 스냅샷을 찍는 스크립트를 제작하게 되었다. 대부분의 자료는 생성일 기준 갯수를 제한해서 관리하는 명령어 줄은 있지만, 특정갯수만 관리하는 스크립트가 없어서 제작해보게 되었음.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# VM Listup
$vmlist = (get-vm).Name
# Loop Run
foreach($vmname in $vmlist)
{
#Create CheckPoint
checkpoint-vm -name $vmname
#Checkpoint Counting
$chknum = (Get-VMSnapshot -VMName $vmname).length
#if Checkpoint Count > 3
if ($chknum -gt 3)
{
$snplist = (Get-VMSnapshot -VMName $vmname).Name
foreach($snp in $snplist)
{
Get-VMSnapshot -VMName $vmname -Name $snp | Remove-VMSnapshot
$chk = (Get-VMSnapshot -VMName $vmname).length
if($chk -eq 3)
{
break
}
}
}
}
|
cs |
스크립트 동작을 자체를 보면 아래와 같이 동작하게된다.
1. 일단 현재 서버에 있는 Hyper-V의 VM 목록을 $vmlist에 저장한다음
2. foreach에 $vmlist에 있는 VM이름을 $vmname에 하나씩 담아서 반복문을 수행함.
3. 스냅샷 생성 명령어를 통해서 해당 VM의 스냅샷을 생성한다음,
4. 해당 VM의 스냅샷이 총 몇개있는지 확인한다.
5. 스냅샷의 갯수가 3개를 초과할 경우에는
6. 스냅샷의 이름을 $snplist에 저장한다음
7. foreach문을 통해서 $snplist에 있는 스냅샷이름을 $snp에 하나씩 담아서 반복문을 수행.
8. $snp에 담겨있는 스냅샷 이름을 삭제한다음,
9. 스냅샷갯수를 다시 확인한다음
10. 3개가 되었을경우 $snplist에 대한 foreach문을 탈출한다.
일단 이 스크립트는 스케줄을 통한 스냅샷 뿐만 아니라 별도의 사용자가 스냅샷을 찍어도 지속적으로 3개를 관리하기 위해서 만들게 되었다. 추후 3개가 너무 적을경우 갯수를 조정하면 된다.