LVM快照备份与恢复

简介

最近在做数据备份方面的工作,用到两个工具,一个是dd,而另一个是lvm的快照(snapshot)。由于数据比较大,直接是用dd非常耗时,而lvm的快照可以在几秒内轻松搞定,而且可以达到实时的效果,但是使用lvm快照的代价就是以空间换取时间。 
下面我们就先来了解下原理: 
LVM中snapshot通过“写时复制”(copy on write) 来实现,即当一个snapshot创建的时候,仅拷贝原始卷里数据的元数据(meta-data);创建的时候,并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原始卷上有写操作执行时,snapshot跟踪原始卷块的改变,这个时候原始卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里。

注意:采取CoW实现方式时,snapshot的大小并不需要和原始卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦 snapshot的空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而无法使用,从而导致这个snapshot无效。所以,非常重要的一点,一定要在snapshot的生命周期里,做完你需要做得事情。

实例

需求

lvm创建过程在此就不详述,以下是我现有的lvm,其中lv_image就是我们需要备份的逻辑卷。

[[email protected] ~]# lvs
  LV           VG            Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_image     vg_image      -wi-ao----   8.00t                                                                                                                                 
  LogVol00     vg_test -wi-ao----   7.81g                                             
  LogVol01     vg_test -wi-ao---- 101.70g   1234512345

实现

前提:lvm快照所在的vg必须和备份源(也就是lv_image)是同一个,因此我们需要确认vg_image的剩余空间,若不足需扩展。

1.确认vg_image空间

[[email protected] ~]# vgs
  VG            #PV #LV #SN Attr   VSize   VFree  
  vg_image        2   1   0 wz--n-   8.29t 4.00m
  vg_test         1   2   0 wz--n- 109.51g      0 12341234

由以上看出vg_image的剩余空间(VFree)为4m,显然空间不够。

2.vg空间扩展

此处,你可能有一个问题“vg需要扩展多大的空间?”前面提到过cow的原理,snapshot越大,我们在snapshot的周期内做的就越多,但是我们空间有限,因此我们一般使用snapshot的空间是原始卷的10%左右

现在我们有个2T大小的备份盘/dev/sdf1使用。

[[email protected] ~]# vgextend vg_image /dev/sdf1
  Volume group "vg_image" successfully extended
[[email protected] ~]# pvs
  PV         VG            Fmt  Attr PSize   PFree  
  /dev/sda2  vg_test       lvm2 a--  109.51g      0 
  /dev/sdc1  vg_image      lvm2 a--    8.00t   4.00m
  /dev/sdf1  vg_image      lvm2 a--    2.00t   2.00t[[email protected] ~]# vgs
  VG            #PV #LV #SN Attr   VSize   VFree  
  vg_image        2   1   0 wz--n-   2.00t   2.00t
  vg_picture118   1   2   0 wz--n- 109.51g      0 12345678910111234567891011

3.创建快照

[[email protected] ~]# lvcreate -L 300GB -s -n lv_image_snap /dev/vg_image/lv_image 11

其中: 
-L 300G 表示此次创建快照大小 
-s 表示创建快照 
-n lv_image_snap 表示新的快照名为lv_image_snap 
/dev/vg_image/lv_image 为要创建快照的逻辑卷

[[email protected] ~]# lvs
  LV           VG            Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_image     vg_image      -wi-ao----   8.00t                                                                                        
  lv_image_snap vg_image     -swi-a---- 300.00g   lv_image  0                                        
  LogVol00     vg_test -wi-ao----   7.81g                                             
  LogVol01     vg_test -wi-ao---- 101.70g   123456123456

至此,我们的快照已经创建完毕,只需将其挂载即可。 
mount /dev/vg_image/lv_image_snap /mnt 
另,“Data%”部分的数据会随着源逻辑卷的数据增大而增大,达到100%后快照将无法使用,需要进行扩展。在创建快照前,最好将源逻辑卷挂载成只读。

4.删除逻辑卷 
lvremove /dev/vg_image/lv_image_snap 
vgreduce vg_image /dev/sdf1 
pvremove /dev/sdf1

快照还原

在此以上述备份为基础:

#确保/data拥有足够的空间dd if=/dev/vg_image/lv_image_snap of=/data/recover.imgdd if=/data/recover.img of=/dev/vg_new/lv_newrm /data/recover.imglvremove /dev/vg_image/lv_image_snap1234512345

注意:虽然snapshot小,但是通过snapshot备份出来的空间一定要足够大,因为它的数据和源lvm的数据一样大。

总结

通过使用lvm的快照我们可以轻松的备份数据,由于snapshot和源lvm的关系,snapshot只能够临时使用,不能脱离源lvm而存在;因此做到数据的万无一失,我们可以在snapshot的基础上进行dd备份或其他备份操作,这样既不会影响原始数据也能够达到备份的需求。

时间: 2024-10-16 15:57:19

LVM快照备份与恢复的相关文章

烂泥:KVM利用LVM快照备份与恢复虚拟机

本文首发于烂泥行天下. 最近一段时间一直在学习有关LVM逻辑卷方面的知识,前几篇文章介绍了有关LVM的逻辑卷的基本相关知识,包括逻辑卷及卷组的扩容与缩小.今天我们再来介绍LVM快照的功能. 注意:本次实验是与虚拟化KVM进行集成测试,通过KVM虚拟机是否正常启动来检查LVM的备份与恢复. 有关LVM的快照功能,我们可以通过lvcreate –help命令,查看帮助文档.如下: 先来查看系统中逻辑卷,使用lvs命令.如下: 通过上图,我们可以看到目前系统中只有一个逻辑卷/dev/vg1/vhost

烂泥:LVM学习之KVM利用LVM快照备份与恢复虚拟机

本文由秀依林枫提供友情赞助,首发于烂泥行天下. 最近一段时间一直在学习有关LVM逻辑卷方面的知识,前几篇文章介绍了有关LVM的逻辑卷的基本相关知识,包括逻辑卷及卷组的扩容与缩小.今天我们再来介绍LVM快照的功能. 注意:本次实验是与虚拟化KVM进行集成测试,通过KVM虚拟机是否正常启动来检查LVM的备份与恢复. 有关LVM的快照功能,我们可以通过lvcreate –help命令,查看帮助文档.如下: 先来查看系统中逻辑卷,使用lvs命令.如下: 通过上图,我们可以看到目前系统中只有一个逻辑卷/d

MySQL备份与恢复常用方法总结(mysqldump/xtrabackup/lvm快照备份/二进制日志及时点恢复)

MySQL备份与恢复常用方法总结 (mysqldump/xtrabackup/lvm快照备份/逻辑备份与恢复/二进制日志及时点恢复) 自言:学习在于总结,把所了解的类似东西放到一起更能加深记忆 一.了解备份相关知识 1)按服务器备份时状态可分为:     热备份:读.写不受影响:     温备份:仅可以执行读操作:     冷备份:离线备份:读.写操作均中止:2)按服务器备份数据集可分为:     物理备份:复制数据文件:     逻辑备份:将数据导出至文本文件中:3)按服务器备份数据量可分为:

Linux-6.5下 MariaDB-10基于LVM快照的备份数据 详解

理解部分: LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性.LVM可以对分区在线扩容,快照,镜像和条带化,功能非常强大.这篇文章的主题就是其中一个功能--快照. 快照(Snapshot)就是关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像.快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品: 其实

lvm快照备份mysql

快照备份原理(从其他博客看的): 原理:通过lvm快照给lvm真身拍个照片,当lvm真身发送改变时,lvm快照把lvm真身改变之前的内容存放在快照上,这样在lvm快照有效的这段时间内,我们看到的lvm快照上的内容始终是lvm真身在创建lvm快照时内容,通过备份lvm快照即可达到在线备份lvm真身的目的.需要注意的是,当lvm快照比lvm真身小时,若lvm真身发生的改变大于lvm快照,则lvm快照将变得无法读取而失效; 若lvm快照大于等于lvm真身,则不会发生前面的情况.当一个snapshot创

MySQL基于LVM快照的备份恢复

目录 1.数据库全备份 2.准备LVM卷 3.数据恢复到LVM卷 4.基于LVM快照备份数据 5.数据灾难恢复 6.总结 写在前面: 测试环境中已安装有mysql 5.5.36数据库,但数据目录没有存放在LVM卷,此次要演示基于LVM的数据备份和恢复,所以就把mysql的数据先迁移到LVM上再做快照卷的备份. 如果innodb表基于LVM来做备份,那事务日志文件和数据文件要在同一个LVM的逻辑卷上,因为在同一时刻我们只能对一个逻辑卷做快照,如果事务日志与数据文件不在同一卷上,那做快照后会导致事务

使用LVM快照进行数据库备份

使用mysqldump备份时,如果存储引擎为MyISAM,则只能实现温备份,并需使用选项--lock-all-tables锁定所有表.如果存储引擎为InnoDB,则加上--single-transaction选项,可以实现热备.使用mysqldump进行逻辑备份,还存在如下问题:浮点数据丢失精度: 备份出的数据更占用空间:不过可压缩后以大大节省空间 不适合对大数据库(如一个库超过10G)做完全备份 另外对InnoDB而言,需要使用mysql> FLUSH TABLES WITH READ LOC

lvm-snapshot:基于LVM快照的备份之准备工作

选择lvm逻辑卷存储数据库数据目录的2大理由 (1) 一般来说,我们会将数据库的数据目录放在lvm逻辑卷上,因为数据库的数据增长速度可能会超出我们的预期 ,这样在将来即便是数据增长很快,我们也不必担心,因为lvm可以实现在线扩容 (2) 我们可以对数据目录做基于lvm快照的备份 1.创建用于存储数据目录lvm设备 1.1 创建一个新分区,并修改分区类型 # echo -e 'n\np\n1\n\n+10G\nw\n'|fdisk /dev/sdb # echo -e 't\n8e\np\nw\n

lvm-snapshot:基于LVM快照的备份

续 lvm-snapshot:基于LVM快照的备份之准备工作 Attention,Please! 重头戏开始啦 3.基于LVM快照的备份 (1)事务日志跟数据文件必须在同一个卷上: (2)创建快照卷之前,要请求MySQL的全局锁:在快照创建完成之后释放锁: (3)请求全局锁完成之后,做一次日志滚动:做二进制日志文件及位置标记(手动进行): 备份步骤: 3.1 请求全局锁,并滚动日志 MariaDB [hellodb]> FLUSH TABLES WITH READ LOCK; MariaDB [