微软云 Azure 微软云快照自动创建

微软云Azure / 2026-04-17 21:20:46

话说某天凌晨两点,小张盯着屏幕,手指悬在回车键上,额头沁出细汗——他刚误删了生产环境数据库的主数据盘。三秒后,他猛拍大腿:“快照!我上周设的自动快照呢?!”

五分钟后,他瘫在椅子上,眼神空洞,嘴里喃喃:“……原来快照没开自动,只开了手动。”

这事儿后来成了他们部门团建时的保留节目,叫《快照不是备份,但比老板的承诺更靠不住》。

一、先泼盆冷水:快照 ≠ 备份,它只是“硬盘的自拍”

别急着抄代码,咱得先破个幻觉:Azure 快照不是备份,它是一张“只读、增量、依赖源磁盘”的硬盘快照——说白了,就是给磁盘拍张高清自拍,但照片底片还连着原相机(源磁盘)。一旦源磁盘被删、损坏或权限被误关,快照立马变废片,连缩略图都打不开。

类比一下:快照是你的微信聊天记录截图;备份是你把整段对话导出成PDF+存网盘+发邮箱+刻光盘+念给猫听(多重冗余)。截图丢了,聊天还在;快照挂了,数据可能真就随风而逝了。

所以,快照的正经定位是:快速恢复的缓冲垫 + 磁盘变更前的保险绳 + 运维人的临时定心丸,而不是“删库跑路后还能笑着领年终奖”的终极兜底方案。

二、自动快照怎么搞?三步走,不写论文,只写能跑的脚本

Azure 官方没提供“一键开启自动快照”的按钮(大概怕用户点完以为万事大吉),但给了你一把瑞士军刀——PowerShell + Azure CLI + 定时任务。我们选最接地气的组合:PowerShell 脚本 + Azure Automation(免费层够用)。

Step 1|准备快照身份证
给每块要保护的磁盘打上标签,比如:AutoSnapshot=YesRetentionDays=7Timezone=Asia/Shanghai。别小看这仨标签——它们是你脚本的“眼睛”,让程序知道“谁该拍”“拍多久”“几点拍”。

Step 2|抄一段“能活过测试”的脚本
以下不是伪代码,是实测过、带注释、防手抖的 PowerShell(已去敏,可直接改名运行):

# 登录(Automation账户自带上下文,本地运行需加 Connect-AzAccount)
$rgName = "prod-rg"
$location = "East Asia"
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"

# 找所有带 AutoSnapshot=Yes 的托管磁盘
$disks = Get-AzDisk -ResourceGroupName $rgName | Where-Object {
    $_.Tags.AutoSnapshot -eq "Yes" -and $_.ManagedBy
}

foreach ($disk in $disks) {
    $snapshotName = "$($disk.Name)-snap-$timestamp"
    $snapshotConfig = New-AzSnapshotConfig -SourceUri $disk.Id `
        -Location $location `
        -CreateOption Copy `
        -Tag @{"CreatedBy"="AutoSnap"; "OriginDisk"=$disk.Name}
    
    # 创建快照(注意:同一区域同名快照会冲突,所以带时间戳)
    $null = New-AzSnapshot -SnapshotName $snapshotName `
        -Snapshot $snapshotConfig `
        -ResourceGroupName $rgName
    
    Write-Output "✅ 已创建快照:$snapshotName"
    
    # 清理 N 天前的旧快照(按 RetentionDays 标签)
    $retention = [int]$disk.Tags.RetentionDays
    $cutoff = (Get-Date).AddDays(-$retention)
    Get-AzSnapshot -ResourceGroupName $rgName |
        Where-Object { $_.Tags.OriginDisk -eq $disk.Name -and $_.TimeCreated -lt $cutoff } |
        ForEach-Object { Remove-AzSnapshot -ResourceGroupName $rgName -SnapshotName $_.Name -Force }
}

Step 3|让它自己醒、自己干、自己睡
扔进 Azure Automation Account,新建一个 Runbook(PowerShell 类型),粘贴保存,再配个 Schedule:比如每天凌晨 2:15(避开业务高峰+留出 15 分钟容错窗口)。记得勾选“启用”——很多兄弟卡在这一步,脚本写得飞起,定时器却灰着,像买了闹钟没上发条。

三、血泪教训:那些让自动快照“自动失联”的坑

  • 坑一|跨区域快照失效:快照必须和源磁盘在同一区域。你在上海资源组里建的磁盘,快照不能存在北京区域——Azure 不支持“异地自拍”,强行指定会报错“LocationMismatch”,不是权限问题,是地理学问题。
  • 坑二|标签大小写敏感autotag=yesAutoSnapshot=Yes。PowerShell 严格区分大小写,建议统一用 PascalCase 写法,团队 Wiki 里标红加粗:“标签名,不许拼音首字母小写!”
  • 坑三|快照计费静悄悄:每个快照按实际占用空间计费(非磁盘容量),但如果你删了源磁盘,所有关联快照立刻转为“独立快照”,开始按全量计费——一夜之间账单翻倍,财务部电话打爆你手机。
  • 坑四|脚本跑一半崩了:没加错误处理的脚本,遇到一块磁盘权限异常,整个循环戛然而止。补一句 try {…} catch {Write-Warning "跳过磁盘 $($disk.Name),原因:$($_.Exception.Message)"},世界瞬间安静。

四、快照之后呢?别忘了“快照的快照”

自动快照解决了“随时可回滚”,但没解决“灾难级丢失”。所以建议搭配:快照(小时级恢复)+ Azure Backup(策略化备份,支持跨区域、加密、合规审计)+ 导出 VHD 到 Blob 存储(冷备,便宜到像白捡)。三者不是替代关系,是保安(快照)、保镖(Backup)、保险柜(VHD归档)的黄金三角。

顺便说,Blob 存储的 Archive 层,存一份快照导出的 VHD,一年费用≈一杯奶茶钱——而它能在你遭遇勒索病毒、误格式化、甚至整个资源组被删时,成为最后的救命稻草。

微软云 Azure 五、结尾彩蛋:运维人的自我修养

最后送大家三条快照生存守则:

  1. 每月手动触发一次恢复测试:选个快照,新建虚拟机挂上去,登录进去看看 /etc/passwd 是否完整。不试,永远不知道快照是不是“看起来很美”。
  2. 快照命名带上业务含义:别叫 disk01-snap-20240520,改成 payment-db-os-snap-pre-patch-v2.3.1——下次半夜救火,你不会对着二十个时间戳快照抓狂。
  3. 在钉钉/企业微信建个「快照日报」机器人:每天早八点推送:“昨日成功创建 7 个快照,清理过期快照 3 个,无失败项 ✅”。仪式感拉满,安全感自来。

回到开头那个凌晨两点的小张——他后来写了份《快照 SOP》,贴在工位玻璃上,标题加粗加红:“快照不背锅,但它愿意陪你扛第一波压力。”

技术没有银弹,但有快照;世界充满意外,但有准备。祝你每次 New-AzSnapshot 都返回绿色 ✅,每次 Remove-AzSnapshot 都心里踏实,每次深夜告警,都能淡定回一句:“别慌,我有快照,还有咖啡。”

下载.png
Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系