首页 > 其他分享 >LVM-快照大法

LVM-快照大法

时间:2024-06-03 09:24:17浏览次数:17  
标签:大法 快照 创建 nicklv00 LVM home nickvg 数据

LVM 机制还提供了对 LV 做快照的功能,也就是说可以给文件系统做一个备份,这也是设计 LVM 快照的主要目的。LVM 的快照功能采用写时复制技术(Copy-On-Write,COW),这比传统的备份技术的效率要高很多。创建快照时不用停止服务,就可以对数据进行备份。说明:LVM 还支持 thin 类型的快照,但是本文中的快照都是指 COW 类型的快照。

LVM 采用的写时复制,是指当 LVM 快照创建的时候,仅创建到实际数据的 inode 的硬链接(hark-link)而已。只要实际的数据没有改变,快照就只包含指向数据的 inode 的指针,而非数据本身。快照会跟踪原始卷中块的改变,一旦你更改了快照对应的文件或目录,这个时候原始卷上将要改变的数据会在改变之前拷贝到快照预留的空间。说明:本文的演示环境为 ubuntu 16.04。

LVM 快照的原理
创建快照实际上也是创建了一个逻辑卷,只不过该卷的属性与普通逻辑卷的属性有些不一样。我们可以通过下图来理解快照数据卷(图中的实线框表示快照区域,虚线框表示文件系统):

左图为最初创建的快照数据卷状况,LVM 会预留一个区域 (比如左图的左侧三个 PE 区块) 作为数据存放处。此时快照数据卷内并没有任何数据,而快照数据卷与源数据卷共享所有的 PE 数据, 因此你会看到快照数据卷的内容与源数据卷中的内容是一模一样的。等到系统运行一阵子后,假设 A 区域的数据被更新了(上面右图所示),则更新前系统会将该区域的数据移动到快照数据卷中, 所以在右图的快照数据卷中被占用了一块 PE 成为 A,而其他 B 到 I 的区块则还是与源数据卷共享!

由於快照区与原本的 LV 共享很多 PE 区块,因此快照区与被快照的 LV 必须要在同一个 VG 上头,下面两点非常重要:

VG中需要预留存放快照本身的空间,不能全部被占满。

快照所在的 VG 必须与被备份的 LV 相同,否则创建快照会失败。

创建 LVM 快照
在创建快照前让我们
先查看一下系统当前的基本情况:

数据卷 nicklv00 大小为 15G,在卷组 nickvg 中。

卷组 nickvg 的容量为 70G,其中有 55G 为空闲容量,所以我们有足够的资源为数据卷 nickvg/nicklv00 创建快照。
其实快照就是一个特殊类型的数据卷,所以创建快照的命令和创建数据卷的命令相同,也是 lvcreate:

$ sudo lvcreate -L 15G --snapshot --name nicksnap00 nickvg/nicklv00

其实就是添加了一个特殊类型的 LV:

此时如果把 LV nicksnap00 挂载到系统中,里面的内容和 LV nicklv00 中的内容是一样的。
创建的快照的大小可以比源数据卷小,但是当源数据卷中的数据更新过多时会导致快照容量不足而引起的错误并丢失数据。

创建快照后,如果源数据卷中的文件被更新了,快照系统中则保存着其创建快照时的版本。

还原部分数据
如果我们明确的知道需要还原某个文件,可以挂载快照数据卷,直接拷贝其中旧版本的文件即可。下面以 /home/doc/hello.txt 文件为了进行演示。hello.txt 文件原本的内容为 "hello world",先更新一下 hello.txt 文件:

我们在文件中加入了一句话:"I changed you!"。接下来我们开始通过快照来还原这个文件。

挂载快照数据卷

查看快照中的文件内容:

验明正身后直接通过 cp 命令覆盖原文件就可以了:

还原整个数据卷上的数据
如果数据卷上有很多小文件,并且都可能会被更新,这种情况下就不适合用上面的方法了。此时一把还原所有的数据会效率更高些,接下来我们介绍还原整个数据卷上所有数据的方式。

挂载快照数据卷
这一步与之前的操作相同,挂载点也同样为 /home/nick/bak 目录。

把快照中的数据导出到另外一个数据卷上
创建一个新的目录 /home/nick/backup,注意这个目录所在的文件系统既不是源数据卷也不是快照数据卷。然后把快照数据卷中的内容创建为压缩文件保存在 /home/nick/backup 目录中:

为什么要把数据备份到其它的数据卷呢?为什么不可以直接格式化 nickvg/nicklv00 然后将快照 nickvg/nicksnap00 直接复制给 nickvg/nicklv00 呢?原因是因为 nickvg/nicksnap00 是 nickvg/nicklv00 的快照,如果格式化整个 nickvg/nicklv00,那么nickvg/nicklv00 上的所有数据都会被搬移到 nickvg/nicksnap00。如果 nickvg/nicksnap00 的容量不够大,那么部分数据将无法复制到 nickvg/nicksnap00 内!

卸载并删除快照数据卷

$ sudo umount /home/nick/bak
$ sudo lvremove nickvg/nicksnap00

卸载源数据卷,格式化后重新挂载

$ sudo umount /home/doc
$ sudo mkfs.ext4 /dev/nickvg/nicklv00
$ sudo mount /dev/mapper/nickvg-nicklv00 /home/doc

把数据还原到源数据卷

$ sudo tar -xf /home/nick/backup/lvm.tar.gz -C /home/doc
这样就把创建快照时刻的数据完全还原出来了。

合并快照(merge snapshot)
前面介绍的方法可以恢复整个数据卷上的数据,但是操作起来实在是太繁琐了,其实我们可以通过 lvconvert 命令配合其 --merge 选项一把搞定整个数据卷的还原。下面演示该方法的主要步骤。

创建快照
由于前面的演示删除了快照数据卷,这里我们重新创建名称为 nicksnap00 的快照数据卷:

$ sudo lvcreate -L 15G --snapshot --name nicksnap00 nickvg/nicklv00

然后更新一下文件 /home/doc/hello.txt:

$ echo "I changed you!" >> /home/doc/hello.txt
卸载源数据卷
合并快照的操作也需要卸载源数据卷:

$ sudo umount /home/doc
合并快照
确认源数据卷和快照数据卷都没有被挂载后就可以执行合并快照的操作了:

$ sudo lvconvert --merge nickvg/nicksnap00

注意,合并快照的操作会自动删除快照数据卷:

上图显示快照数据卷 nicksnap00 已经被删除了。

重新挂载源数据卷
现在我们来重新挂载源数据卷并查看文件 hello.txt 的内:

$ sudo mount /dev/mapper/nickvg-nicklv00 /home/doc
$ cat /home/doc/hello.txt

hello.txt 文件中没有字符串 "I changed you!",说明整个数据卷上的内容已经被还原到了创建快照的时刻。

利用快照创建测试环境
如果我们需要在测试环境中不断的修改文件,就可以利用快照来创建这样的测试环境。想想看,对一个数据卷创建快照,然后把这个快照数据卷挂载到系统中并作为测试环境任意地修改上面的数据;当测试完成时直接卸载并删除这个快照就可以了;如果还需要这样的测试环境,再创建一个新的快照就行了,是不是很方便呢!

总结
快照是 LVM 中的一个稍微高级一点的话题,但仅就日常的使用来说,本文介绍的常见用法足够大家愉快的开启探索之旅了。

标签:大法,快照,创建,nicklv00,LVM,home,nickvg,数据
From: https://www.cnblogs.com/hflinux/p/18228035

相关文章

  • GraalVM - Java8 Linux AMD64
    使用GraalVM在linuxamd64环境下编译Java8程序的步骤主要包括:下载GraalVM下载native-image安装native-image编译程序1.下载GraalVM可以通过Github的release页面直接下载(往回找,找到支持java8的graalvm-ce-java8-linux-amd64-20.3.2.tar.gz)https://github.com/graalvm/gra......
  • LVM日常使用
    LVM在日常运维工作中占据着很大的比重,列举LVM常见的日常操作及步骤1、添加一个磁盘到OS,格式化文件系统使用,参考如下:扫描磁盘pvcreate/dev/sdbvgcreate-s8Mdatavg/dev/adblvcreate-L10G-ndatalvdatavgmkfs.ext4/dev/datavg/datalvmount/dev/datavg/datalv/data......
  • postgressql——数据库快照(5)
    事物快照一个数据页包含了每一行的多个版本,每一行的可见版本一起构成一个快照。快照只包含在创建快照时当前已提交的数据,在这个特定的时刻提供了一个一致性的视图,这个视图我们就可以叫做快照。为了确保数据的隔离性,每一个事物都有自己的快照,这就意味着不同的事物在不同的......
  • Linux lvm扩容
    [root@szxdbsoftware]#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:0060G0disk├─sda18:101G0part/boot└─sda28:2059G0part├─centos-root253:0038.3G0lvm......
  • 06 LVM与磁盘配额
    目录6.1LVM逻辑卷管理    6.1.1LVM概述        1.PV(PhysicalVolume,逻辑卷)        2.VG(VolumeGroup,卷组)        3.LV(LogicalVolume,逻辑卷)    6.1.2LVM的管理命令        1.......
  • 新加磁盘lvm扩容
    一、lvm简介:逻辑卷管理(LogicalVolumeManagement,LVM)是一种用于在Linux系统中管理磁盘空间的工具。LVM允许管理员将物理磁盘抽象成逻辑卷和卷组,从而提供了更大的灵活性和可管理性。LVM将一个或多个磁盘分区(PV)虚拟为一个卷组(VG),相当于一个大的硬盘,我们可以在上面划分一些逻辑卷......
  • Linux入门第六章LVM与磁盘配额
    一.LVM逻辑卷管理    许多Linux操作系统的使用者在安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量。如果当初估计不准确,一旦系统分区不够用就可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要。1.LV......
  • LVM与磁盘配额
    目录LVM概念LVM的管理命令实操磁盘配额概念实操 LVM概念lvm全称logicalvolumemanager就是逻辑卷管理是Linux系统下对硬盘分区的一种管理机制。lvm机制特别适合于管理大存储设备,可以动态的对硬盘进行扩容。它是逻辑上的磁盘、概念上的磁盘。文件系统创建......
  • LVM、磁盘配额
    LVM与磁盘配额一、LVMLVM(逻辑卷管理):是Linux系统下对硬盘分区的管理机制。LVM机制适合于管理管理大存储设备。可以动态对硬盘进行扩容。逻辑上的磁盘,概念上的磁盘,文件系统创建之后不考虑底层的物理磁盘。若干个磁盘分区或者物理硬盘合并成一个逻辑卷组。再把逻辑卷组......
  • JVM调优维护常用工具之VisualVM 可视化优化工具
    VisualVM是一个工具,它提供了一个可视界面,用于查看Java虚拟机(JavaVirtualMachine,JVM)上运行的基于Java技术的应用程序(Java应用程序)的详细信息。VisualVM对JavaDevelopmentKit(JDK)工具所检索的JVM软件相关数据进行组织,并通过一种使您可以快速查看有关多个......