6

我计划通过关闭我的虚拟机然后将 vhd 文件从生产容器复制到备份容器来备份我的 azure vhd 文件。如何自动删除备份容器中一周前的 vhd 文件?

4

3 回答 3

8

如果您可以接受使用 PowerShell,那么这将为您完成。它将注册一个每天运行的计划作业并删除指定容器中的 PageBlob。

$taskTrigger = New-ScheduledTaskTrigger -Daily -At 12:01AM
Register-ScheduledJob -Name DeleteMyOldFiles -Trigger $taskTrigger -ScriptBlock {
    $isOldDate = [DateTime]::UtcNow.AddDays(-7)

    Get-AzureStorageBlob -Container "[YOUR CONTAINER NAME]" |
        Where-Object { $_.LastModified.UtcDateTime -lt $isOldDate -and $_.BlobType -eq "PageBlob" } |
        Remove-AzureStorageBlob
}
于 2013-07-30T22:59:33.937 回答
1

这是开箱即用的东西。您必须自己编写一些代码。基本上这些步骤是:

  1. 列出备份容器中的所有 Blob。Blob 列表将返回 Blob 及其属性。其中一个属性是LastModifiedDate(这将是 UTC)。
  2. 然后,您可以使用您的逻辑来查找“x”天前已修改的 blob。然后,您将继续删除这些 blob。

其他几件事:

  • 您提到您的备份容器包含一些本质上是页 blob 的 VHD。当您列出 blob 时,您还将获得 blob 类型,因此您可以按 blob 类型 (= PageBlob)进一步过滤列表
  • 就自动化过程而言,您可以在 PowerShell 脚本中编写它,然后使用 Windows 调度程序对其进行调度。如果您喜欢编写 node.js,您可以使用 node.js 编写相同的逻辑并使用 Windows Azure Mobile Service Scheduler。
于 2013-07-30T15:09:11.840 回答
1

我在尝试删除整个容器时找到了这个答案。使用 Rick 的回答作为模板,我想出了这个试验假设来确定哪些容器将被删除:

$ctx = New-AzureStorageContext -StorageAccountName $AzureAccount `
                               -StorageAccountKey  $AzureAccountKey

$isOldDate = [DateTime]::UtcNow.AddDays(-7)

Get-AzureStorageContainer -Context $ctx                              `
     |  Where-Object { $_.LastModified.UtcDateTime -lt $isOldDate  } `
     |  Remove-AzureStorageContainer -WhatIf 

然后,当我对应该删除列表感到满意时,我使用-Force了这样就不必确认每次删除:

Get-AzureStorageContainer -Context $ctx                              `
     |  Where-Object { $_.LastModified.UtcDateTime -lt $isOldDate  } `
     |  Remove-AzureStorageContainer -Force 
于 2017-02-14T18:58:41.760 回答