您的位置:首页 > 其它

删除老的Azure Blob Snapshot

2016-01-24 23:27 281 查看
客户有这样的需求:每天需要对VM的数据进行备份,但如果备份的时间超过一定的天数,需要进行清除。

本文也是在前一篇Azure Blob Snapshot上的优化。

"Azure blob Storage Snapshot"里,删除Snapshot的思路是遍历所有Storage Account,找到所有的vhd文件,看看是否有Snapshot,如果有判断是否超过14天,如果超过则删除,如果没有超过,则保留。

本文的思路是:

获取所有的虚拟机,判断虚拟机是否运行,如果运行,获取这台虚拟机上所有的硬盘。

如果硬盘的Snapshot超过我们给定的时间,删除,否则不做操作。

具体的脚本如下:

function DeleteOlderSnapshot {
[CmdletBinding()]
param (
[Parameter (Mandatory=$True,
ValueFromPipeLine=$True,
HelpMessage="BeforeTheDayWillBeDelete")]

[String] $Day,
[switch] $LogErrors
)
BEGIN{
Write-Verbose "Error Log will Be $ErrorLog"
}
Process
{

$vms = Get-AzureVM
$now = Get-Date
foreach ($vm in $vms)
{
if($vm.Status -eq "ReadyRole")
{
$osblobname = ($vm.VM.OSVirtualHardDisk).MediaLink.ToString().Split("/")[-1]
$osblobcontainer = ($vm.VM.OSVirtualHardDisk).MediaLink.ToString().Split("/")[-2]
$osblobsa = ($vm.VM.OSVirtualHardDisk).MediaLink.ToString().Split("/")[-3].Split(".")[0]

$storagekey = (Get-AzureStorageKey -StorageAccountName $osblobsa).Primary
$ctr = New-AzureStorageContext -StorageAccountName $osblobsa -StorageAccountKey $storagekey -Environment AzureChinaCloud

$blobs = Get-AzureStorageBlob -Container $osblobcontainer -Context $ctr | Where-Object {$_.Name -match $osblobname}

foreach ($blob in $blobs)
{
if($blob.ICloudBlob.IsSnapshot)
{

$diff = [datetime]::FromBinary($now.Ticks-$blob.SnapshotTime.Ticks)
write-host $blob.name  "is a snapshot"  "snapshot time is"  $diff.DayOfYear "days"
if ( $diff.dayofyear -ge $Day)
{

write-host "delete"
$blob.ICloudBlob.Delete()
}

}else{
write-host $blob.Name  "is original disk"
}
}

$count = $vm.VM.DataVirtualHardDisks.Count

for($i=0;$i -lt $count;$i++)
{
$datablobname = ($vm.VM.DataVirtualHardDisks)[$i].MediaLink.ToString().Split("/")[-1]
$datablobcontainer = ($vm.VM.DataVirtualHardDisks)[$i].MediaLink.ToString().Split("/")[-2]
$datablobsa = ($vm.VM.DataVirtualHardDisks)[$i].MediaLink.ToString().Split("/")[-3].Split(".")[0]
$storagekey = (Get-AzureStorageKey -StorageAccountName $datablobsa).Primary
$ctr = New-AzureStorageContext -StorageAccountName $datablobsa -StorageAccountKey $storagekey -Environment AzureChinaCloud

$blobs = Get-AzureStorageBlob -Container $datablobcontainer -Context $ctr | Where-Object {$_.Name -match $datablobname}
foreach ($blob in $blobs)
{
if($blob.ICloudBlob.IsSnapshot)
{

$diff = [datetime]::FromBinary($now.Ticks-$blob.SnapshotTime.Ticks)
write-host $blob.name  "is a snapshot"  "snapshot time is"  $diff.DayOfYear "days"
if ( $diff.dayofyear -ge $Day)
{

write-host "delete"
$blob.ICloudBlob.Delete()
}

}else{
write-host $blob.Name  "is original disk"
}
}
}
}
}

}
end {}
}
DeleteOlderSnapshot -Day 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: