Atom feed of this document
  

 备份块存储服务磁盘

其实你使用LVM快照来创建快照的话,就意味着你也可以使用LVM快照来做备份。通过使用LVM快照,你可以有效减少备份的占用空间;它会仅备份已经存在的数据,而不是整个卷。

要备份卷的话,你必须给它创建一个快照。一个LVM快照就是确切的逻辑卷复制,其包含了冰冻状态的数据。这保证数据的可靠性,因为在卷创建的过程中数据是不可操作的。记住,通过命令nova volume-create在已有的LVM逻辑卷上创建卷。

你也必须保证操作系统没有使用此卷,且客户文件系统已经将所有的数据刷回。这通常是意味着在快照创建期间这些文件系统已经卸载。当然在逻辑卷创建完成后可立刻再次挂载。

在你创建快照之前,你必须确保拥有足够的空间来存放它。作为预防措施,你须拥有潜在快照大小至少两倍的空间。如果可用空间不足,快照可能会损坏。

For this example, assume that a 100 GB volume named volume-00000001 was created for an instance while only 4 GB are used. This example uses these commands to back up only those 4 GB:

  • lvm2命令。直接操作卷。

  • kpartx命令。 发现实例内部的所创建的分区表。

  • tar命令。创建最小的备份。

  • sha1sum命令。计算备份校验来检查其一致性。

你可以应用此过程给任何大小的卷。

 

欲备份块存储服务磁盘

  1. 为一个正在使用中的卷创建一个快照

    1. 使用此命令来列出所有的卷:

      # lvdisplay
    2. 创建快照;在卷已经挂接到实例上时你仍可使用:

      # lvcreate --size 10G --snapshot --name volume-00000001-snapshot /dev/cinder-volumes/volume-00000001

      使用 --snapshot 配置选项来告诉 LVM 您想要一个已有卷的快照。该命令包含了快照卷保留空间的大小、快照的名称和已有卷的路径。一般这个路径为 /dev/cinder-volumes/VOLUME_NAME

      大小不必与快照的卷相同。--size 参数定义了 LVM 为快照卷保留的空间。作为一个防范措施,大小应该与原本的卷相同,即使整个空间目前没有完全被快照所使用。

    3. 再次运行 lvdisplay命令来验证快照:

      --- Logical volume ---
      LV Name                /dev/cinder-volumes/volume-00000001
      VG Name                cinder-volumes
      LV UUID                gI8hta-p21U-IW2q-hRN1-nTzN-UC2G-dKbdKr
      LV Write Access        read/write
      LV snapshot status     source of
                             /dev/cinder-volumes/volume-00000026-snap [active]
      LV Status              available
      # open                 1
      LV Size                15,00 GiB
      Current LE             3840
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           251:13
      
      --- Logical volume ---
      LV Name                /dev/cinder-volumes/volume-00000001-snap
      VG Name                cinder-volumes
      LV UUID                HlW3Ep-g5I8-KGQb-IRvi-IRYU-lIKe-wE9zYr
      LV Write Access        read/write
      LV snapshot status     active destination for /dev/cinder-volumes/volume-00000026
      LV Status              available
      # open                 0
      LV Size                15,00 GiB
      Current LE             3840
      COW-table size         10,00 GiB
      COW-table LE           2560
      Allocated to snapshot  0,00%
      Snapshot chunk size    4,00 KiB
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           251:14
  2. 发现分区表

    1. 要使用命令 tar来利用快照的话,将你的分区挂载到块存储服务的服务器上。

      kpartx 工具发现和映射分区表,你可以使用它来查看实例中所创建的分区。不使用实例内部创建的分区,你就无法查看其内容,且无法创建效率较高的备份。

      # kpartx -av /dev/cinder-volumes/volume-00000001-snapshot
      [注意]注意

      在基于Debian的发行版中,你可以使用 apt-get install kpartx 命令来安装 kpartx

      如果工具成功的发现和映射了分区表,没有错误返回。

    2. 要检查分区表映射,运行此命令:

      $ ls /dev/mapper/nova*

      你可以看到分区 cinder--volumes-volume--00000001--snapshot1

      如果你在此卷上创建了更多的分区的话,你可以看到多个分区;例如: cinder--volumes-volume--00000001--snapshot2, cinder--volumes-volume--00000001--snapshot3, 等等。

    3. 挂载用户的分区:

      # mount /dev/mapper/cinder--volumes-volume--volume--00000001--snapshot1 /mnt

      如果分区成功挂载,没有错误返回。

      你可以直接访问实例内部的数据。如果有信息提示你无法挂载它,那么去看是否为快照分配了足够的空间,或者是kpartx命令无法找到分区表。

      给快照分配更多空间,然后再次尝试。

  3. 使用 tar 命令来创建归档

    创建一个卷的备份:

    $ tar --exclude="lost+found" --exclude="some/data/to/exclude" -czf volume-00000001.tar.gz -C /mnt/ /backup/destination

    此命令创建了一个 tar.gz文件,其包含了数据,且仅有数据。这确保了你不会因为空的扇区而浪费空间。

  4. 校验计算I

    你须经常性的去校验你的备份文件。尤其是你通过网络传输了某个文件,你就需要运行校验计算来确保此文件没有在传输过程中有所损害。校验的文件ID是唯一的。如果校验值变得不同了,那就意味着文件已经损坏。

    运行此命令来为你的文件和保存的文件结果运行校验:

    $ sha1sum volume-00000001.tar.gz > volume-00000001.checksum
    [注意]注意

    使用命令sha1sum要小心,因为完成计算所需要的时间直接与文件的大小成正比。

    For files larger than around 4 to 6 GB, and depending on your CPU, the process might take a long time.

  5. 时候清理工作

    现在你已经有了有效性和一致性的备份了,使用此命令来清理下文件系统:

    1. 卸载卷:

      umount /mnt
    2. 删除分区表:

      kpartx -dv /dev/cinder-volumes/volume-00000001-snapshot
    3. 删除快照:

      lvremove -f /dev/cinder-volumes/volume-00000001-snapshot

    重复上述步骤,针对所有的卷。

  6. 自动化备份

    随着越来越多的卷分配到块存储服务,你就需要将这些都自动化了,尤其是备份,脚本SCR_5005_V01_NUAC-OPENSTACK-EBS-volumes-backup.sh可以帮助你完成此任务。脚本所执行的操作来自上述的实例,但是其还提供了邮件的报告,以及基于backups_retention_days设置的备份。

    在运行块存储服务的机器上启动此脚本。

    此例展示了一个邮件报告:

    Backup Start Time - 07/10 at 01:00:01
    Current retention - 7 days
    
    The backup volume is mounted. Proceed...
    Removing old backups...  : /BACKUPS/EBS-VOL/volume-00000019/volume-00000019_28_09_2011.tar.gz
         /BACKUPS/EBS-VOL/volume-00000019 - 0 h 1 m and 21 seconds. Size - 3,5G
    
    The backup volume is mounted. Proceed...
    Removing old backups...  : /BACKUPS/EBS-VOL/volume-0000001a/volume-0000001a_28_09_2011.tar.gz
         /BACKUPS/EBS-VOL/volume-0000001a - 0 h 4 m and 15 seconds. Size - 6,9G
    ---------------------------------------
    Total backups size - 267G - Used space : 35%
    Total execution time - 1 h 75 m and 35 seconds

    脚本也会让你使用SSH登录到实例中,然后在实例中运行命令mysqldump。要使这正常工作,启用计算项目的秘钥连接。如果你不打算运行mysqldump命令,你可以将enable_mysql_dump=0 添加到脚本中来禁用此功能。

Questions? Discuss on ask.openstack.org
Found an error? Report a bug against this page


loading table of contents...