Chinaunix首页 | 论坛 | 博客
  • 博客访问: 509365
  • 博文数量: 110
  • 博客积分: 3971
  • 博客等级: 中校
  • 技术积分: 1175
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-20 23:27
文章分类

全部博文(110)

文章存档

2015年(2)

2014年(1)

2013年(1)

2011年(9)

2010年(28)

2009年(12)

2008年(13)

2007年(23)

2006年(21)

我的朋友

分类: WINDOWS

2011-04-29 15:11:39

可以使用如下方法建立snapshot target的逻辑设备:
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 $size2 linear $2 0" | dmsetup create $3
o    # vi kevin_snapshot_base_dev.sh
#!/bin/bash
dmsetup table $1 | dmsetup create $2
o    # vi kevin_snapshot_dev.sh
size=$(blockdev --getsize $1)
CHUCK_SIZE=$3
dd if=/dev/zero of=$2 bs=512 count=$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/sda8 kevin_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_dev kevin_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 reload kevin_snapshot_base_dev
o        # dmsetup resume kevin_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        经过reloadrusume后再次挂接设备就保持了同步
 
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 remore kevin_snapshot_base_dev
 
 
 
mkdir /mnt/kevin_linear_dev /mnt/kevin_snapshot_base_dev /mnt/kevin_snapshot_dev
 
/root/111/kevin_linear_dev.sh /dev/vod/iscsi /dev/sdd1 kevin_linear_dev
/etc/init.d/tgtd start
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2011-04.com.xsrs:nodevod0
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/mapper/kevin_linear_dev
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.2.234
/root/111/kevin_snapshot_base_dev.sh kevin_linear_dev kevin_snapshot_base_dev
/root/111/kevin_snapshot_dev.sh /dev/mapper/kevin_snapshot_base_dev /dev/sdd3 8 \ kevin_snapshot_dev
tgtadm --lld iscsi --op new --mode target --tid 2 -T iqn.2011-04.com.xsrs:nodkz
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/mapper/kevin_snapshot_dev
i=1;
while [ $i -lt 206 ]
do
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.2.$i
i=`expr $i + 1`
done

tgtadm --lld iscsi --op bind --mode target --tid 2 -I 192.168.2.245
 
 
##############
设备映射器
echo 0 $(blockdev --getsize /dev/loop1) linear /dev/loop1 0 | dmsetup create new
这创造了一个“新”块设备 /dev/mapper/new ,但这并不是真正的新数据,它的数据来自于/dev/loop1 ,删除这个设备:dmsetup remove new
当然,你可以用不同的方式来做事情,例如,你可以只用/dev/loop1的一半 来做这件事情。
    SIZE1=$(blockdev --getsize /dev/loop1)
    echo 0 $(($SIZE1 / 2)) linear /dev/loop1 0 | dmsetup create half
或许你是其中的一个人自己的多个磁盘配置以便阅读从其中一个n字节速度比阅读n/2从其中两个字节,这可能是因为你的磁盘控制器能够multi-disk操作并联,还是因为你有多个磁盘控制器。设备映射器可以帮助你们加快你的业务。
    SIZE=$(( $(blockdev --getsize /dev/loop1) +  $(blockdev --getsize /dev/loop2) ))
    echo 0 $SIZE striped 2 16 /dev/loop1 0 /dev/loop2 0 | dmsetup create tiger
现在读/写/ 368 /映射工具从/只老虎会交替(16个部门块)在两个设备之间;你也会相结合的磁盘机中,什么样的线性情况
 
$$$$$$$
只有一个设备的情况。
# vi kevin_linear_dev.sh
#!/bin/bash
size1=$(blockdev --getsize $1)
echo -e "0 $size1 linear $1 0" | dmsetup create $2
 
####################################
 
size1=$(blockdev --getsize64 /dev/sdd)
size=$((size1/512))
echo 0 $size linear /dev/sdd 0 | dmsetup create kevin_linear_dev1
dmsetup table kevin_linear_dev1 | dmsetup create kevin_snapshot_base_dev1
size1=$(blockdev --getsize64 /dev/mapper/kevin_snapshot_base_dev1)
size=$((size1/512))
CHUCK_SIZE=8
dd if=/dev/zero of=/dev/sdb2 bs=512 count=$CHUCK_SIZE
echo 0 $size snapshot /dev/mapper/kevin_snapshot_base_dev1 /dev/sdb2 p 8 | dmsetup create kevin_snapshot_dev1
 
tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2011-05.com.xsrs:nodH
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/mapper/kevin_linear_dev1
tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.1.207
tgtadm --lld iscsi --op new --mode target --tid 2 -T iqn.2011-05.com.xsrs:nodHkz
tgtadm --lld iscsi --op new --mode logicalunit --tid 2 --lun 1 -b /dev/mapper/kevin_snapshot_dev1
tgtadm --lld iscsi --op bind --mode target --tid 2 -I ALL
 
#######################################
 
size1=$(blockdev --getsize64 /dev/sde)
size=$((size1/512))
echo 0 $size linear /dev/sde 0 | dmsetup create kevin_linear_dev2
dmsetup table kevin_linear_dev2 | dmsetup create kevin_snapshot_base_dev2
size1=$(blockdev --getsize64 /dev/mapper/kevin_snapshot_base_dev2)
size=$((size1/512))
CHUCK_SIZE=8
dd if=/dev/zero of=/dev/sdb3 bs=512 count=$CHUCK_SIZE
echo 0 $size snapshot /dev/mapper/kevin_snapshot_base_dev2 /dev/sdb3 p 8 | dmsetup create kevin_snapshot_dev2
 
tgtadm --lld iscsi --op new --mode target --tid 3 -T iqn.2011-05.com.xsrs:nodM
tgtadm --lld iscsi --op new --mode logicalunit --tid 3 --lun 1 -b /dev/mapper/kevin_linear_dev2
tgtadm --lld iscsi --op bind --mode target --tid 3 -I 192.168.1.207
tgtadm --lld iscsi --op new --mode target --tid 4 -T iqn.2011-05.com.xsrs:nodMkz
tgtadm --lld iscsi --op new --mode logicalunit --tid 4 --lun 1 -b /dev/mapper/kevin_snapshot_dev2
tgtadm --lld iscsi --op bind --mode target --tid 4 -I ALL
 
###########################################
 
 
注意:用此方法最好安装系统是不要选择“逻辑卷”,以免冲突。
 
阅读(1891) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~