使用dmsetup命令生成snapshot

可以使用如下方法建立snapshottarget的逻辑设备:

1.   分区并通知系统确认

  • #fdisk /dev/sda
  • 分别创建/dev/sda7、/dev/sda8、/dev/sda9

分区均为1G空间

  •  #partprobe
  •  其中/dev/sda7和/dev/sda8用来制作镜像目标linear target逻辑设备,/dev/sda9用来作为COW设备。

2.   编写创建/dev/mapper/kevin_linear_dev ,/dev/mapper/kevin_snapshot_base_dev和/dev/mapper/kevin_snapshot_dev三个设备的脚本

  • /dev/mapper/kevin_linear_dev

是原始目标设备

  • /dev/mapper/kevin_snapshot_base_dev是snapshot所需要的中间基础设备,后面会说到它与/dev/mapper/kevin_linear_dev的区别
  • /dev/mapper/kevin_snapshot_dev是创建出的快照设备
  •  将如下代码写入并运行

#vi kevin_linear_dev.sh

#!/bin/bash

size1=$(blockdev --getsize $1)

size2=$(blockdev --getsize $2 )

echo -e "0 $size1 linear $1 0\n$size1 $size2linear $2 0" | dmsetup create $3

 

#vikevin_snapshot_base_dev.sh

#!/bin/bash

dmsetup table $1 | dmsetup create $2

 

#vikevin_snapshot_dev.sh

size=$(blockdev --getsize $1)

CHUCK_SIZE=$3

dd if=/dev/zero of=$2 bs=512count=$CHUCK_SIZE

echo 0 $size snapshot $1 $2 p $3 | dmsetup create$4

3.   创建/dev/mapper/kevin_linear_dev设备并为其创建文件系统放入文件

#./kevin_linear_dev.sh    /dev/sda7    /dev/sda8   kevin_linear_dev

#mkfs.ext3/dev/mapper/kevin_linear_dev

#mkdir /mnt/kevin_linear_dev

#mount /dev/mapper/kevin_linear_dev      /mnt/kevin_linear_dev

#cp /var/log/message     /mnt/kevin_linear_dev/

4.   创建/dev/mapper/kevin_snapshot_base_dev设备,并检测。

#./kevin_snapshot_base_dev.sh   kevin_linear_dev    kevin_snapshot_base_dev

#mkdir  /mnt/kevin_snapshot_base_dev

#mount  /dev/mapper/kevin_snapshot_base_dev   /mnt/kevin_snapshot_base_dev

#diff -qur  /mnt/kevin_snapshot_base_dev     /mnt/kevin_linear_dev

你会发现/mnt/kevin_snapshot_base_dev目录中的文件和/mnt/kevin_linear_dev目录中的文件一致

#cp /etc/resolv.conf       /mnt/kevin_linear_dev

 #diff -qur   /mnt/kevin_snapshot_base_dev     /mnt/kevin_linear_dev

即时修改后/mnt/kevin_snapshot_base_dev目录中的文件和 /mnt/kevin_linear_dev
目录中的文件就不同步了!

5.   同步/dev/mapper/kevin_linear_dev和/dev/mapper/kevin_snapshot_base_dev设备

# umount /mnt/kevin_linear_dev

# umount /mnt/kevin_snapshot_base_dev

  • 卸载设备的挂接目录

# dmsetup table kevin_linear_dev | dmsetup reloadkevin_snapshot_base_dev

# dmsetup resume     kevin_snapshot_base_dev

#mount /dev/mapper/kevin_linear_dev     /mnt/kevin_linear_dev

 #mount /dev/mapper/kevin_snapshot_base_dev     /mnt/kevin_snapshot_base_dev

#diff -qur /mnt/kevin_snapshot_base_dev    /mnt/kevin_linear_dev

经过reload和rusume后再次挂接设备就保持了同步

6.   创建/dev/mapper/kevin_snapshot_dev设备并挂接

  • #umount /mnt/kevin_snapshot_base_dev
  •  #umount /mnt/kevin_linear_dev
  • #dmsetup suspend kevin_linear_dev

为了保证数据完整性保证目标设备没有I/O操作,需要先将目标设备挂起

  • #./kevin_snapshot_dev.sh     /dev/mapper/kevin_snapshot_base_dev    /dev/sda9     8     \kevin_snapshot_dev
  • #dmsetup resume kevin_linear_dev

恢复kevin_linear-dev设备后设备就可以正常运了

  • #mkdir /mnt/kevin_snapshot_dev
  • #mount /dev/mapper/kevin_snapshot_dev    /mnt/kevin_snapshot_dev

7.   测试和同步快照

  • #mount /mnt/mapper/kevin_linear_dev/mnt/kevin_linear_dev
  •  #diff -qur /mnt/kevin_linear_dev/mnt/kevin_snapshot_dev

在没有更改任何文件的情况下快照和数据源是一致的

  • #cp  /etc/rc.local/mnt/kevin_snapshot_dev
  •  #diff -qur   /mnt/kevin_linear_dev   /mnt/kevin_snapshot_dev

 当快照被修改后,写入或修改的数据将存入COW设备,而数据源保持不变

  • #mount /dev/mapper/kevin_snapshot_base-dev   /mnt/kevin_snapshot-dev

 这里会报错,因为/dev/mapper/kevin_snapshot_base_dev已经被加入 /dev/mapper/kevin_snapshot_dev,不可以直接使用了。如果想查看和导出数据源,就需要用到下一节的snapshot-origin设备

snapshot的好处是快速建立备份和数据修改分支,同时如果数据源是直读设备(例如CD/DVD),我们需要暂时修改其少量数据时snapshot也非常有效。

8.   当我们不在需要使用以上三个设备后,我们需要卸载和删除这个设备

  • # dmsetup remove kevin_snapshot_dev
  •  # dmsetup remore kevin_linear_dev
  •  # dmsetup remorekevin_snapshot_base_dev
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值