使用dmsetup命令生成snapshot ( by quqi99 )
来源:互联网 发布:js this.classname 编辑:程序博客网 时间:2024/05/29 15:08
使用dmsetup命令生成snapshot
转载自, http://blog.sina.com.cn/s/blog_4d3833cf0100n68c.html
可以使用如下方法建立snapshottarget的逻辑设备:
1. 分区并通知系统确认
o #fdisk /dev/sda
o 分别创建/dev/sda7、/dev/sda8、/dev/sda9分区均为1G空间
o #partprobe
o 其中/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三个设备的脚本
o /dev/mapper/kevin_linear_dev是原始目标设备
o /dev/mapper/kevin_snapshot_base_dev是snapshot所需要的中间基础设备,后面会说到它与/dev/mapper/kevin_linear_dev的区别
o /dev/mapper/kevin_snapshot_dev是创建出的快照设备
o 将如下代码写入并运行
o #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
o #vikevin_snapshot_base_dev.sh
#!/bin/bash
dmsetup table $1 | dmsetup create $2
o #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设备并为其创建文件系统放入文件
o #./kevin_linear_dev.sh /dev/sda7 /dev/sda8kevin_linear_dev
o #mkfs.ext3/dev/mapper/kevin_linear_dev
o #mkdir /mnt/kevin_linear_dev
o #mount /dev/mapper/kevin_linear_dev/mnt/kevin_linear_dev
o #cp /var/log/message/mnt/kevin_linear_dev/
4. 创建/dev/mapper/kevin_snapshot_base_dev设备,并检测。
o #./kevin_snapshot_base_dev.sh kevin_linear_devkevin_snapshot_base_dev
o #mkdir /mnt/kevin_snapshot_base_dev
o #mount /dev/mapper/kevin_snapshot_base_dev/mnt/kevin_snapshot_base_dev
o #diff -qur /mnt/kevin_snapshot_base_dev/mnt/kevin_linear_dev
o 你会发现/mnt/kevin_snapshot_base_dev目录中的文件和/mnt/kevin_linear_dev目录中的文件一致
o #cp /etc/resolv.conf/mnt/kevin_linear_dev
o #diff -qur /mnt/kevin_snapshot_base_dev/mnt/kevin_linear_dev
o 即时修改后/mnt/kevin_snapshot_base_dev目录中的文件和 /mnt/kevin_linear_dev目录中的文件就不同步了!
5. 同步/dev/mapper/kevin_linear_dev和/dev/mapper/kevin_snapshot_base_dev设备
o # umount /mnt/kevin_linear_dev
o # umount /mnt/kevin_snapshot_base_dev
o 卸载设备的挂接目录
o # dmsetup table kevin_linear_dev | dmsetup reloadkevin_snapshot_base_dev
o # dmsetup resumekevin_snapshot_base_dev
o #mount /dev/mapper/kevin_linear_dev/mnt/kevin_linear_dev
o #mount /dev/mapper/kevin_snapshot_base_dev/mnt/kevin_snapshot_base_dev
o #diff -qur /mnt/kevin_snapshot_base_dev/mnt/kevin_linear_dev
o 经过reload和rusume后再次挂接设备就保持了同步
6. 创建/dev/mapper/kevin_snapshot_dev设备并挂接
o #umount /mnt/kevin_snapshot_base_dev
o #umount /mnt/kevin_linear_dev
o #dmsetup suspend kevin_linear_dev
o 为了保证数据完整性保证目标设备没有I/O操作,需要先将目标设备挂起
o #./kevin_snapshot_dev.sh/dev/mapper/kevin_snapshot_base_dev /dev/sda9 8 \kevin_snapshot_dev
o #dmsetup resume kevin_linear_dev
o 恢复kevin_linear-dev设备后设备就可以正常运了
o #mkdir /mnt/kevin_snapshot_dev
o #mount /dev/mapper/kevin_snapshot_dev/mnt/kevin_snapshot_dev
7. 测试和同步快照
o #mount /mnt/mapper/kevin_linear_dev/mnt/kevin_linear_dev
o #diff -qur /mnt/kevin_linear_dev/mnt/kevin_snapshot_dev
o 在没有更改任何文件的情况下快照和数据源是一致的
o #cp /etc/rc.local/mnt/kevin_snapshot_dev
o #diff -qur /mnt/kevin_linear_dev/mnt/kevin_snapshot_dev
o 当快照被修改后,写入或修改的数据将存入COW设备,而数据源保持不变
o #mount /dev/mapper/kevin_snapshot_base-dev/mnt/kevin_snapshot-dev
o 这里会报错,因为/dev/mapper/kevin_snapshot_base_dev已经被加入 /dev/mapper/kevin_snapshot_dev,不可以直接使用了。如果想查看和导出数据源,就需要用到下一节的snapshot-origin设备
o snapshot的好处是快速建立备份和数据修改分支,同时如果数据源是直读设备(例如CD/DVD),我们需要暂时修改其少量数据时snapshot也非常有效。
8. 当我们不在需要使用以上三个设备后,我们需要卸载和删除这个设备
o # dmsetup remove kevin_snapshot_dev
o # dmsetup remore kevin_linear_dev
o # dmsetup remorekevin_snapshot_base_dev
- 使用dmsetup命令生成snapshot ( by quqi99 )
- dmsetup命令使用
- 使用jacob生成word(by quqi99)
- screen命令的使用 ( by quqi99 )
- dmsetup命令
- 使用itext生成word格式的报表(by quqi99)
- bzr命令常用(by quqi99)
- 使用OVS DPDK (by quqi99)
- 使用iframe时Session重新生成的导致数据丢失的问题 ( by quqi99 )
- dmsetup
- nutch安装,使用,二次开发入门 ( by quqi99 )
- 使用quilt管理patch ( by quqi99 )
- 使用Chef部署OpenStack (by quqi99)
- 使用iSCSI挂载QNAP存储(by quqi99)
- 使用rsync同步数据(by quqi99)
- 三种方式使用vlan (by quqi99)
- 使用ERWin与ERStudio进行数据库建模(by quqi99)
- 使用SQL语句进行数据迁移(by quqi99)
- 记录一下Sublime Text2的字体
- 看看大型网站都是用什么语言写的
- c#中的数据类型(第八课)
- ios 简单的plist文件读写操作(Document和NSUserDefaults)
- hdu - 2602 - Bone Collector
- 使用dmsetup命令生成snapshot ( by quqi99 )
- Android使用JNI实现Java与C之间传递数据 .
- 照成“未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突”的三种可能性
- 【2013.1.31】好朋友就是你的东西是我的,我的东西还是我的——Flyweight(使用Vector)
- GeekOS 中的project1
- Android开发--AsyncTask异步任务(一)
- 在myeclipse中的console调用cmd
- c#中数据和方法的封装(第九课)
- 博客搬家声明