用户虚拟机硬盘的备份是客户在部署云应用中是一个非常重要的部分。

目前有多种平台的备份方法:

  1. 捕获镜像:可以采用Capture的方式(powershell命令为Save-AzureVMImage)捕获虚拟机系统盘和数据盘。但这种方式占用空间太大,而且Capture的Image数量也是有数量限制的。所以不是优选的方案。
  2. 复制硬盘vhd文件:通过AzCopy的方式,把VM的vhd复制到部分的blob的container中。这种方式也是占用空间大。不适合大规模的备份,只适合灾备时的使用。
  3. 对Blob的vhd文件snapshot:通过blob snapshot功能对VM的vhd文件进行blob snapshot。这种方式节省空间,操作方便,是虚拟机进行备份的非常好的一种方式。

Azure的Snapshot是按照实际使用空间进行计费的。由于Snapshot遵循"写时复制"的方式,如果Base Blob的内容不发生变化,Snapshot里是没有内容的,只有Base Blob发生变化时,Snapshot会把Base Blob中老的内容复制过来。

具体的计费方式如下:

情况一: 如果Snapshot的内容和Base Blob的内容相同,收费只收Base Blob的费用(3个单元)。

情况二:如果Base Blob中的CCC内容发生更新,Snapshot会复制Base Blob中老的CCC部分。收费将收4个单元

情况三:如果Base Blob中的CCC内容删除,增加了DDD,Snapshot中会复制Base Blob中老的CCC部分。收费将收4个单元

情况四:多个blob块出现更改,多个snapshot,按照实际的用量进行计费。图中的计费单元为8个

具体的blob snapshot的实现有三个部分:1.创建;2.删除超过xx天的snapshot;3.恢复snapshot。本文将介绍这三个功能的脚本:

  1. 创建Snapshot:

$storageaccounts = Get-AzureStorageAccount
$subs = Get-AzureSubscription -Current
foreach ($storageaccount in $storageaccounts)

{
  Set-AzureSubscription -SubscriptionName $subs.SubscriptionName -CurrentStorageAccountName $storageaccount.StorageAccountName
  $containers = Get-AzureStorageContainer | Where-Object {$_.name -Match "vhd"}
  foreach($container in $containers)
  {
    $pageblobs = Get-AzureStorageBlob -Container $container.Name | Where-Object {$_.Name -match ".vhd"}

    foreach ($blob in $pageblobs)
    {

      if(!$blob.ICloudBlob.IsSnapshot)
      {
        $blob.ICloudBlob.CreateSnapshot()

      }

    }
  }

}

2. 删除超过14天的Snapshot

$storageaccounts = Get-AzureStorageAccount

foreach($storageaccount in $storageaccounts)

{

  $pageblobs = Get-AzureStorageBlob -Container vhds | Where-Object {$_.Name -match ".vhd"}

  $now = Get-Date

  foreach($pageblob in $pageblobs)

  {

    $diff = [datetime]::FromBinary($now.Ticks-$pageblob.SnapshotTime.Ticks)

    if($pageblob.ICloudBlob.IsSnapshot)

    {

      if ( $diff.dayofyear -ge 14)

      {

        write-host "the snapshot is "$diff.dayofyear "days"

        write-host "delete"

        $pageblob.ICloudBlob.Delete()

      }else

      {

        write-host "the snapshot is "$diff.dayofyear "days"

        Write-Host "not delete snapshot"

      }

    }else

    {

      write-host "is not snapshot, do not delete"

    }

  }

}

3.恢复7天前的Snapshot

$StorageAccount = "XXXX"

$StorageKey = "XXX=="

$Ctr = New-AzureStorageContext -StorageAccountName $StorageAccount -StorageAccountKey $StorageKey

$SrcContainer = "container1"

$DestContainer = "container2"

$blobname ="xxx.vhd"

$Date=date

$DestBlob = "R"+$Date.DayOfYear+$blobname

$DayOfYear = 7

$times = Get-AzureStorageBlob -Container $SrcContainer | Where-Object {$_.Name -match "xxx.vhd" } | Select -ExpandProperty SnapshotTime

foreach($time in $times)

{

  if ($time.DayOfYear -eq $DayOfYear)

  {

    $snaptime = $time

  }else

  {

    continue

  }

}

$srcsnap = Get-AzureStorageBlob -Container $SrcContainer | Where-Object {$_.SnapshotTime -eq $snaptime}

Start-AzureStorageBlobCopy -CloudBlob $srcsnap.ICloudBlob -DestContainer $DestContainer -DestBlob $DestBlob

$blob.ICloudBlob.CreateSnapshot()

Azure blob Storage Snapshot的更多相关文章

  1. Azure Blob Storage 基本用法 -- Azure Storage 之 Blob

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在<Azure Table storage ...

  2. Azure Blob Storage从入门到精通

    今天推荐的是一个系列文章,让读者阅读完成后可以对Azure Blob Storage的开发有一个全面的了解,可谓是从入门到精通. Azure在最初的版本里面就提供了非结构化数据的存储服务,也即Blob ...

  3. presto访问 Azure blob storage

    当集群使用Azure Blog Storage时,prestoDB无法获取返回结果,在此记录下 如下,hive里面的两个表,一个使用的是本地的hdfs,一个是使用 azure blob storage ...

  4. DW(六):polybase访问Azure Blob Storage

    目录: 连接hadoop配置语法 配置hadoop连接 Pushdown配置 Create external tables for Azure blob storage 连接hadoop配置语法: g ...

  5. hadoop(四): 本地 hbase 集群配置 Azure Blob Storage

    基于 HDP2.4安装(五):集群及组件安装 创建的hadoop集群,修改默认配置,将hbase 存储配置为 Azure Blob Storage 目录: 简述 配置 验证 FAQ 简述: hadoo ...

  6. Python 操作 Azure Blob Storage

    笔者在<Azure 基础:Blob Storage>一文中介绍了 Azure Blob Storage 的基本概念,并通过 C# 代码展示了如何进行基本的操作.最近笔者需要在 Linux ...

  7. [AWS vs Azure] 云计算里AWS和Azure的探究(6) - Amazon Simple Storage Service 和 Microsoft Azure Blob Storage

    这几天Nasuni公司出了一份报告,分析了各个云厂商的云存储的性能,包括Amazon S3,Azure Blob Storage, Google Drive, HP以及Rackspace.其中性能上A ...

  8. [Windows Azure] How to use the Windows Azure Blob Storage Service in .NET

    How to use the Windows Azure Blob Storage Service in .NET version 1.7 version 2.0 This guide will de ...

  9. Azure Functions(二)集成 Azure Blob Storage 存储文件

    一,引言 上一篇文章有介绍到什么是 SeverLess ,ServerLess 都有哪些特点,以及多云环境下 ServerLess 都有哪些解决方案.在这众多解决方案中就包括 Function App ...

随机推荐

  1. Java和js的区别,以及Java和c的区别

    刚开始的时候我们也搞不清这些概念,不过后来就慢慢清晰了,首先和大家谈谈Java和js的区别,最简单的区别就是一个是后端,一个是前端.   java是纯面向对象语言,javascrip其实和Java是完 ...

  2. Python菜鸟之路:Python基础-生成器和迭代器、递归

    一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退. 1. 迭代器优点 对于无法随机访问的数据结构(比如set)而言, ...

  3. 【网络与系统安全】20179209 wireshark和nmap实验

    TCP三次握手包 在进行实验前,先梳理一遍TCP三次握手的过程,这个图是我本科学网络时画过不少于十遍的图,我觉得非常有纪念意义. 稍作解释,第一次握手,客户端发起请求连接,发送一个标志位为SYN的ip ...

  4. Delphi中Message消息的三种使用方法(覆盖WndProc,覆盖消息函数,改写WMCommand)

    实例1 unit Unit1; interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Fo ...

  5. Flask 进阶session和上下文管理解析

    session的源码流程 将session放置在redis中 安装 pip install flask-session 使用 import redis from flask import Flask, ...

  6. iOS uitableViewCell 选中 push后返回 取消选中状态

    首先我有一个UITableViewController,其中每个UITableViewCell点击后都会push另一个 ViewController,每次点击Cell的时候,Cell都会被选中,当从p ...

  7. 一个例子看懂所有nodejs的官方网络demo

    今天看群里有人用AI技术写了个五子棋,正好用的socket.io,本身我自己很久没看nodejs了,再加上Tcp/IP的知识一直很弱,我就去官网看了下net.socket 发现之前以为懂的一个官方例子 ...

  8. js 数组的所有操作

    js的数组操作有很多,这里记录了常用的和不常用的数组操作方法. 一.数组的创建 数组的创建有两种方法,一种是通过字面量,另一种是通过Array构造函数. 1.字面量 var num1 = [1,2,3 ...

  9. 剑指offer——二叉树的深度与平衡二叉树的判断

    通过后续遍历,可以减少重复访问 #include <iostream> #include <string> using namespace std; struct Binary ...

  10. 多种方法求java求整数的位数

    方法一 private static int getNumLenght(long num){ num = num>0?num:-num; return String.valueOf(num).l ...