发布时间:2014-09-05 17:05:09作者:知识屋
LVM对lv提供了快照“snapshot”备份功能,这种功能也只对LVM 有效。snapshot有多种实现方法,这里只谈谈“写时复制COW”,不是奶牛哦,是“Copy-On-Write”
当一个 snapshot创建的时候,仅拷贝原始卷里的源数据,这不是物理上的数据拷贝,因此snapshot的创建特别快,当原始卷里的数据有写入时,备份卷开 始记录原始卷哪些数据发生了变化,然后在原始卷新数据覆盖旧数据时,将旧数据拷贝到snapshot的预留空间里,起到备份数据的作用,就保证了所有数据 和创建备份卷之前的数据一致性。
而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。所以当原始卷破坏了之后还能用snapshot备份的数据还原。
参考一份51CTO 【asram先生】的解释吧:
【镜像分 离,是为了让镜像卷保持拆分一瞬间的状态,而不再继续被写入数据。而拆分之后,主卷所做的所有写IO动作,会以bitmap的方式记录下来。bitmap 就是一份位图文件,文件中每个位都表示卷上的一个块(扇区,或者由多个扇区组成的逻辑块),如果这个块在镜像分离之后,被写入了数据,则程序就将 bitmap文件中对应的位从0变成1。待备份完成之后,可以将镜像关系恢复,此时主卷和镜像卷上的数据是不一致的,需要重新做同步。程序搜索 bitmap中所有为1的位,对应到卷上的块,然后将这些块上的数据,同步到镜像卷,从而恢复实时镜像关系。
改变块(changed block)
快照创建成功后,源和快照共享同一份物理数据拷贝,直到数据发生写操作,此时源上老数据或者新增数据将被写向新的存储空间。为了记录和追踪块的变化和复制 信息,需要一个位图(bitmap),它用于确定实际拷贝数据的位置,以及确定从源还是目标来获取数据。
并发(concurrent)
它与改变块非常相似,但它总是物理地拷贝数据。当即时拷贝执行时,没有数据被复制。取而代之,它创建一个位图来记录数据的复制情况,并在后台进行真正的数据物理复制。
写时复制快 照在快照时间点之后,没有物理数据复制发生,仅仅复制了原始数据物理位置的元数据。因此,快照创建非常快,可以瞬间完成。然后,快照副本跟踪原始卷的数据 变化(即原始卷写操作),一旦原始卷数据块发生写操作,则先将原始卷数据块读出并写入快照卷,然后用新数据块覆盖原始卷。这样我们访问快照卷上的数据仍旧 是写操作前的,可以保证我们备份数据的一致性。】
检验一下snapshot的特点吧:
采取COW实现方式时,snapshot的大小并不需要和原始卷一样大。那设置成多大呢?第一、根据原始卷数据的改变大小范围来设置;第二、根据 原始卷数据的更新频率来定。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot就无法使用了。当然,如果你的snapshot大小和原始卷一样大,甚至还 要大,那snapshot备份就绝对的不会崩溃啦。
下面就开始吧!
一、新建lv分区,装上一个系统(可以不用装,其实这里只需要说明他是一个我们要备份的数据卷而已)
--->先查看一下vg空闲空间吧
[root@desktop21 /]# vgs
VG #PV #LV #SN Attr VSize VFree
vol0 2 4 1 wz--n- 55.22g 26.22g
--->还有26.22G,建一个3G的lv来装系统吧,lv名称syslv
[root@desktop21 /]# lvcreate -L 3G -n syslv vol0
Logical volume "syslv" created
[root@desktop21 /]# lvdisplay /dev/vol0/syslv
--- Logical volume ---
LV Name /dev/vol0/syslv
VG Name vol0
LV UUID xQXHqK-N3Oj-y9Z1-TBU6-hAsI-ek3V-PkmVmL
LV Write Access read/write
LV Status available
# open 0
LV Size 3.00 GiB (lv大小3G)
Current LE 96
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:6
--->ok,创建成功,接下来我就装一个linux的简易版吧,我就不上图了,自己要测试的自己去试试
【注意:这个lv建立起来若作为安装系统用的话就一定不能格式化了,它是作为硬盘用了哦,谁见过把硬盘拿来格式化了在装系统的?他会警告无法识别的硬盘~】
。
。
。
二、创建snapshot
终于装好了,我们来创建一个snapshot备份吧,和lv创建方法差不多,就多加一个参数-s
[root@desktop21 /]# lvcreate -s -n snapsyslv -L 50M /dev/vol0/syslv
Rounding up size to full physical extent 64.00 MiB
Logical volume "snapsyslv" created
[root@desktop21 /]# lvdisplay /dev/vol0/snapsyslv
--- Logical volume ---
LV Name /dev/vol0/snapsyslv
VG Name vol0
LV UUID snoXql-gI1Q-TSsF-F3LN-SyRI-HInY-8cZM3r
LV Write Access read/write
LV snapshot status active destination for /dev/vol0/syslv
LV Status available
# open 0
LV Size 3.00 GiB
Current LE 96
COW-table size 64.00 MiB (我的PE为32M,创建的只能是32的倍数)
COW-table LE 2
Allocated to snapshot 0.03% (使用率为0.03%)
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:7
--->ok,snapsyslv创建好了,64M,查看一下snapsyslv的详细信息吧:
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 swi-a- 64.00m syslv 0.07
--->我们需要关心的就是上面的使用率0.07%,达到100%就释放,snapshot就坏了,就没用了。
三、改变原始卷的数据,查看备份卷的变化
1、登录到syslv所在的系统,新建文件测试
desktop64 login: root
Password:
[root@desktop64 ~]# dd if=/dev/zero of=testfile bs=1M count=20
20+0 records in
20+0 records out
20971520 bytes (21 MB) copied, 0.0329396 s, 637 MB/s
--->好了,到我们的机子上看看快照的变化吧,刷新几下看看
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 swi-a- 64.00m syslv 0.07
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 swi-a- 64.00m syslv 33.81
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 swi-a- 64.00m syslv 33.83
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 swi-a- 64.00m syslv 33.83
--->看到吗?使用率为33.83%了,快照大小为64M,原始卷新建20M的文件,看是不是使用率为33%左右呢?^_^
2、新建大小为50M的吧,加上之前的20M,看看快照的变化呢
[root@desktop64 ~]# dd if=/dev/zero of=testfile bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB) copied, 0.132893 s, 395 MB/s
--->刷新一下,看看快照变化吧
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 Swi-I- 64.00m syslv 100.00
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 Swi-I- 64.00m syslv 100.00
[root@desktop21 /]# lvs /dev/vol0/snapsyslv
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
snapsyslv vol0 Swi-I- 64.00m syslv 100.00
--->100%啦,查看一下快照的状态?
[root@desktop21 /]# lvdisplay /dev/vol0/snapsyslv
--- Logical volume ---
LV Name /dev/vol0/snapsyslv
VG Name vol0
LV UUID snoXql-gI1Q-TSsF-F3LN-SyRI-HInY-8cZM3r
LV Write Access read/write
LV snapshot status INACTIVE destination for /dev/vol0/syslv (挂了)
LV Status available
# open 0
LV Size 3.00 GiB
Current LE 96
COW-table size 64.00 MiB
COW-table LE 2
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:7
--->看到吗,INACTIVE(没激活了),我们把它激活看看
[root@desktop21 /]# lvchange -ay /dev/vol0/snapsyslv
Can't change snapshot logical volume "snapsyslv"
--->Can't,不能激活了,快照不能用了哦,把它移除吧
[root@desktop21 /]# lvremove /dev/vol0/snapsyslv
Do you really want to remove active logical volume snapsyslv? [y/n]: y
Logical volume "snapsyslv" successfully removed
--->ok,已经移除了,现在可以再继续创建快照了额^_^
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能