概述:逻辑卷管理(LVM)提供了为任何逻辑卷作一个快照的功能,目的是在一致的状态下来得到一个文件系统的备份.因为在备份过程中,应用程序可能访问一个分区的文件或者数据库.一些文件可能在一个状态被备份,而后面的文件可能在一个更新后被备份,导致备份的不完整 .传统的解决方法是以只读的方式挂载一个分区,对数据库应用表级锁或者关闭数据库的引擎等;所有的措施反而影响可用性(但是与没有备份相比不会丢失更多的数据).使用LVM的快照功能可以在没有损失可用性的情况下完成一致的备份.


请注意这个信息只对已经使用LVM的分区有效.LVM快照不能在一个非LVM文件系统上使用.


逻辑卷快照


一快照技术原理

(一)、概念解释

   像照相机一样,机器快门一闪,很快就把刚刚的人像停留在了相纸上。存储系统中的数据“快照”与我们生活中所说的“照片”非常相似,所不同的是,照片的对象不是人,而是数据。如同照片留住了我们过去的摸样和岁月,快照把数据在某一时刻的映像也保留了下来。因此我们可以根据快照查找数据在过去某一时刻的映像,常常用来作为增强数据备份系统的一种技术,它可以很大的缩短RTO和RPO两个指标。

注解:

    RTO (Recovery Time Objective,复原时间目标)是企业可容许服务中断的时间长度。比如说灾难发生后半天内便需要恢复,RTO值就是十二小时;

    RPO (Recovery Point Objective,复原点目标)是指当服务恢复后,恢复得来的数据所对应时的间点。如果现时企业每天凌晨零时进行备份一次,当服务恢复后,系统内储存的只会是最近灾难发生前那个凌晨零时的资料。


   SNIA(存储网络行业协会)对快照(Snapshot)的定义是:关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。而从具体的技术细节来讲,快照是指向保存在存储设备中的数据的引用标记或指针。 

   磁盘快照(Snapshot)是针对整个磁盘卷册进行快速的档案系统备份,与其它备份方式最主要的不同点在于「速度」。进行磁盘快照时,并不牵涉到任何档案复制动作。就算数据量再大,一般来说,通常可以在一秒之内完成备份动作。

   磁盘快照的基本概念与磁带备份等机制有非常大的不同。在建立磁盘快照时,并不需要复制数据本身,它所作的只是通知LX Series NAS服务器将目前有数据的磁盘区块全部保留起来,不被覆写。这个通知动作只需花费极短的时间。接下来的档案修改或任何新增、删除动作,均不会覆写原本数据所在的磁盘区块,而是将修改部分写入其它可用的磁盘区块中。所以可以说,数据复制,或者说数据备份,是在平常档案存取时就做好了,而且对效能影响极低。LX Series NAS档案系统内部会建立一份数据结构,纪录磁盘快照备份及目前作用中档案系统所使用到的磁盘区块及指针,让使用者可以同时存取到主要档案系统及过去的磁盘快照版本。

(二)、快照技术类型

快照技术的作用:主要是能够进行在线数据恢复,当存储设备发生应用故障或者文件损坏时可以进行及时数据恢复,将数据恢复成快照产生时间点的状态。快照的另一个作用是为存储用户提供了另外一个数据访问通道,当原数据进行在线应用处理时,用户可以访问快照数据,还可以利用快照进行测试等工作。  因此,所有存储系统,不论高中低端,只要应用于在线系统,那么快照就成为一个不可或缺的功能。创建一个快照不同的设备需要不同的命令,但对于系统来说,基本都包括如下几个步骤:

  1、首先发起创建指令;

  2、在发起时间点,指令通知操作系统暂停应用程序和文件系统的操作;

  3、刷新文件系统缓存,结束所有的读写事务;

  4、创建快照点;

  5、创建完成之后,释放文件系统和应用程序,系统恢复正常运行。

  现在,快照技术已经超越了简单的数据保护范畴。我们可以用快照进行高效且无风险的应用软件测试。用快照数据做测试,不会对生产数据造成任何的破坏。对于数据挖掘(data mining)和电子发现(eDiscovery)应用,快照也是理想的测试数据源。在灾难恢复方面,快照是一种非常有效的方法——甚至是首选,非常适合遭到恶意软件***、人为误操作和数据损坏等逻辑错误发生时的数据恢复。过去我们认为只有磁盘阵列具备快照功能,但事实上磁盘阵列只是其中之一而已。广义的快照技术通常可有7个不同类型的实现主体:

  1、主机文件系统(包括服务器、台式机、笔记本电脑);

  2、逻辑卷管理器(LVM);

  3、网络附加存储系统(NAS);

  4、磁盘阵列;

  5、存储虚拟化设备;

  6、主机虚拟化管理程序;

  7、数据库。

  下面将逐项介绍一下在各个系统中快照技术的应用,并对其进行详细的说明。

  1、基于文件系统的快照

很多文件系统都支持快照功能,微软的Windows NTFS有VSS卷影拷贝服务(Volume Shadow Copy Services, Vista称作Shadow Copy);Sun Solaris的最新文件系统ZFS(Zettabyte File System);Apple公司的Mac OS X 10.6(雪豹);Novell NetWare 4.11(或更高版本)的Novell Storage Services (NSS) ; Novell SUSE Linux操作系统下的OES-Linux等等。

  “免费”是文件系统快照的优势之一,因为它集成在文件系统内部;另一个优点是非常好用,最新版文件系统的快照功能通常使用起来很简单。不利的一方面是,每个文件系统都必须独立进行管理,当系统数量激增时,管理工作会变得非常繁重。想象一下,如果我们要做快照复制的话,需要给每一个文件系统都配置一套复制关系,而且还只能复制该文件系统自己的快照。此外,不同文件系统所提供的快照种类、快照频率、预留空间等参数也可能不一样,当然也包括设置、操作和管理上的差异。总之,需要管理的服务器和文件系统越多,复杂程度就越高。

  2、基于LVM(逻辑卷管理器)的快照

  带有快照功能的LVM也很多,比如惠普HP-UX操作系统的 Logical Volume Manager;Linux平台的Logical Volume Manager 和Enterprise Volume Management System系统 ;微软Windows 2000及后续版本自带的Logical Disk Manager系统;SUN Solaris 10操作系统的ZFS;以及赛门铁克公司的Veritas Volume Manager(注:Veritas Volume Manager是赛门铁克Veritas Storage Foundation产品的一部分)。

  我们可以创建跨多个文件系统的LVM快照。像赛门铁克的Veritas Volume Manager可以支持大多数常见的操作系统和文件系统。LVM通常还包括存储多路径和存储虚拟化等功能。

  使用LVM时,通常要付出额外的成本,包括为每台服务器购买license(许可证)和维护费。而且,像基于文件系统的快照一样,我们可能还要面对系统之间的协调问题和复杂的技术实施问题。

  3、基于NAS的快照

  NAS本质上就是一个经过优化的、或是专门定制的文件系统,运行在特定的设备上,或集成在存储设备里。大多数中端和企业级NAS系统都提供快照功能,其中既有使用专有操作系统的设备,也包括大量基于Microsoft Windows Storage Server软件的各种NAS。

  通过网络连接到NAS的计算机系统都可以使用这种标准的通用快照,包括物理服务器、虚拟机、台式机和笔记本电脑。它也非常容易操作和管理。基于NAS的快照往往同Windows Volume Shadow Copy Services(卷影复制服务VSS)、备份服务器和备份Agent等软件集成在一起使用。一些NAS厂商还为非Windows平台的数据应用系统开发了Agent代理程序。其他一些与NAS快照有关的技术还包括重复数据删除(EMC公司,FalconStor软件公司和NetApp的产品),有些厂商甚至提供了带有自动精简配置功能的快照,目的是让快照占用的空间变得更少。

  但是,使用便利的工具和附加功能也需要成本,软件license和维护费相当昂贵,一般是按照机器数量和磁盘卷容量来计算。大多数公司的数据量增长很快,需要使用NAS快照的地方也越来越多,因此,操作和管理也将更复杂。

  4、基于磁盘阵列的快照

  大多数磁盘阵列的软件系统里都含有快照功能。基于磁盘阵列的快照与基于NAS的快照有非常相似的优点,即所有与磁盘阵列相连的计算机系统都可以使用这种标准的通用快照功能,包括物理服务器、虚拟机、台式机和笔记本电脑等等。快照的实施、操作和管理也都很简单。像NAS一样,很多磁盘阵列的快照功能也可以被Windows VSS、备份服务器和备份Agent等软件直接调用。一些磁盘阵列厂商还有可供非Windows平台应用系统使用的Agent代理程序。

  基于磁盘阵列的快照也有一些缺点:license和维护费用昂贵;对非Windows平台的应用程序支持有限;磁盘阵列的数量越多,快照的管理也就越复杂。

  5、基于存储虚拟化设备的快照

  这里所说的存储虚拟化设备主要用于SAN光纤网络环境,不同于基于文件(NFS)应用的网络设备,像F5 Network公司的Acopia ARX产品就是排除在这个范畴之外的。主要的存储虚拟化软硬件设备(或融合了虚拟化功能的存储系统)包括:Cloverleaf Communication公司的Intelligent Storage Networking System (iSN);DataCore Software公司的 SANsymphony和SANmelody;EMC的Celerra Gateway blades;FalconStor公司的IPStor;HP的XP系列存储;HDS的Universal Storage Platform V/VM;IBM的SAN Volume Controller;LSI的StoreAge Storage Virtualization Manager (SVM)以及NetApp的V-Series storage controllers等等。

  磁盘阵列和NAS快照所具备的优点在存储虚拟化设备上同样能够体现,而且某些方面还能做的更好。我们可以将来自不同厂商的很多存储设备聚集在少量的几个控制点或单一控制点上进行管理,提供通用的标准化快照。这样做最大程度的简化了快照的管理操作成本和学习成本。

  存储虚拟化快照的缺点与上述类型相比则有些不同。使用存储虚拟化设备会导致I/O延迟的增加,即使是采用旁路架构的设计,最终还是会影响应用程序的响应时间。增加存储虚拟化设备还会使故障分析变得更加困难,潜在的还可能激化厂商之间对故障责任的推诿。从另一个角度看,虽然增加额外的虚拟化存储硬件或软件要产生一定的费用,但是与每个存储系统都独立购买快照功能相比,它的软件license和维护费用都要低一些。

  6、基于主机虚拟化软件的快照

  随着服务器虚拟化应用的普及,基于主机虚拟化管理软件(hypervisor)的快照技术也逐渐流行起来。像Citrix公司的 XenServer、微软的Hyper – V、SUN的xVM Ops Center、以及VMware的ESX和vSphere4等主机虚拟化产品都支持快照功能。

  在主机虚拟化软件层实现快照的优点是简单直接。由于同虚拟机管理软件绑定在一起,因此可以为所有的虚拟机 (VMs) 提供统一的快照,并且还可以同微软的VSS集成,随时调用。相对而言,基于虚拟机的快照很容易部署、使用和管理。

  但是,如果非要找出不喜欢这种快照的理由?我想应该是每一套虚拟机软件的快照需要单独管理;而且当我们在非Windows平台下使用这种快照技术时,必须针对整个VM。这意味着我们只能做粗粒度的数据恢复,还要消耗更多的恢复时间。这种快照是在Windows操作系统外部创建,所以它不能架构在应用软件感知的层面,导致快照出来的映像数据有可能是不一致状态。

  7、基于数据库的快照

  在数据库中,快照动作被称为“snapshot isolation(快照隔离)”。像Oracle和PostgreSQL这样的数据库需要做快照隔离以确保所有的交易命令序列化,就好像被一个个隔开一样,然后再逐个执行。其他的一些数据库也支持快照隔离,但并不要求将交易序列化。在一般情况下,数据库备份工具会利用快照隔离的功能,用快照来恢复崩溃(出现一致性问题)的数据表。

  针对数据库内部数据和基于该数据库的相关应用,使用数据库自带的快照比较有效。

  相反,数据库快照的重要缺欠就是覆盖的范围非常有限,其作用仅限于特定的数据库内部和数据库相关的应用,无法管理同在一台服务器上的文件系统、文件类应用或其他数据库,更不用说管理到其他的服务器了。有时候我们不得不通过其他层次的快照技术来解决数据库之外的数据保护问题,这样,操作和管理将变得有些复杂。

  不同类型的快照及工作原理

  通常,我们会提到6种类型的快照技术:

  1、Copy-on-write 复制写

  2、Redirect-on-write 重定向写

  3、Clone or split mirror 克隆或镜像

  4、Copy-on-write with background copy后台拷贝的复制写

  5、Incremental 增量快照

  6、Continuous data protection 持续数据保护

  复制写和重定向写快照

  Copy-on-write (COW) 复制写快照

  COW快照需要消耗一些存储空间--建立快照卷。当我们为一个数据卷创建一个快照之后,这些预留的空间用来存放被变化数据更新的旧数据。COW快照在初始化的过程中仅仅创建用来描述源数据块位置的指针信息(元数据),而不是完整的将源数据块拷贝过来。因此初始化的过程几乎可以在瞬间完成,对系统的影响也很小。

  COW快照会跟踪数据卷的写操作和数据块变化。当某个数据块发生改变时,在将旧的数据覆盖之前,首先将该块的旧数据复制到预留的快照卷,该步骤仅在数据卷相应数据块位置发生第一次写操作请求时进行。这个处理过程确保快照出来的数据与发起快照的那个精确时间点保持完全一致。这个过程也描述了“copy on write”这个名字的含义。

  如果我们需要访问某个时间点的快照数据,对没有改变过的块直接从数据卷读取;对已经改变并被复制的块则从快照空间读取。从快照被创建那一刻开始,每个快照都会跟踪记录描述块改变的元数据信息。

  COW快照的主要优势在于空间的高效利用,因为快照卷只需要保留发生过变化的数据块,与数据卷相比要小得多。但是我们也知道COW快照有个缺点,它会引起数据卷性能的下降,这是因为创建快照之后,对数据卷的写操作会增加一个等待的过程 --即旧数据块复制到快照卷的过程。另外一个关键问题是每个快照卷必须依赖一个完整的数据卷。

  Redirect-on-write (ROW) 重定向写快照

  “ROW重定向写”与“COW复制写”是相对的概念,它可以避免两次写操作引起的性能损失。ROW同COW一样在空间利用方面效率非常高。那是什么让ROW快照避免了写性能的损耗?其中的原因是ROW把对数据卷的写请求重定向给了快照预留的存储空间,而写操作的重定向设计则把需要两次写才能完成的操作减少为一次写。我们知道COW的两次写包括:1、将旧数据写入快照卷;2、在数据卷写入新数据。而ROW只有写入新数据一步。

  使用ROW快照,数据卷存放的是上一个快照时间点的旧数据,新数据最终存放在预留的快照空间。这里也有一个复杂的问题,就是快照的删除。被删除的快照上的数据必须被复制到原始数据卷,并且做一致性回退。创建的快照越多,维护快照的复杂度也会以指数级别上升。这些复杂性包括对原始数据的访问、快照数据和原始数据卷的跟踪、以及快照删除后的数据调整。另一个直接引发的严重问题是,原始数据集中会产生大量的碎片。 

  克隆或分割镜像快照与后台拷贝的复制写快照

  Clone or split-mirror 克隆或分割镜像快照

  Clone(或split-mirror)快照所创建的是数据的完整副本。Clone(或split-mirror)快照的对象可以是一个存储卷、一个文件系统或者是一个LUN(logical unit number 逻辑单元号)。Clone快照的优点是它们具有高可用性;缺点是所有的数据都要完整的复制一份,复制的过程也不可能在瞬间完成。我们可以分割一对保持同步状态的镜像卷来启用Clone快照,分割的过程瞬间即可完成。然而,当镜像被分割成Clone快照之后,数据卷也就失去了他的同步镜像。

  使用Clone快照需要面对的一个非常严重的问题是每个快照都需要和数据卷一样大的存储空间。尤其是当我们在任何时刻都需要保持一份以上Clone卷的情况,这个成本会非常高。另一个缺点是影响性能,因为在镜像卷之间保持写同步需要一定的系统开销。

  Copy-on-write with background copy 后台拷贝的复制写快照

  Copy-on-write with background copy快照有两个生成步骤:首先创建一个瞬时即可生成的COW快照;然后利用后台进程将数据卷的数据复制到快照空间,最后生成一份数据卷的克隆或镜像。

  创建这种快照的目的是发挥COW快照的优势,同时尽量屏蔽它的不足。因此,这种快照常常被形容为COW和Clone快照的混合体。

  增量快照与持续数据保护

  (Incremental)增量快照

  增量快照的特点是可以跟踪数据卷和快照卷的变化。当一个新的增量快照生成之后,旧的快照数据将被刷新。第一个快照和随后创建的每一个增量快照数据上都有时间戳标记,利用时间戳我们能够将快照数据回滚到任意的一个时间点。增量快照技术能够加快后续快照的生成速度,而且仅仅在名义上多消耗了一点空间而已。由此,我们可以提高创建快照的频率,也能让快照保留得更久一点。

  增量快照的不足之处是它需要依靠上面所提到的其他基础技术来创建第一个快照 (COW、ROW、clone/split mirror、copy-on-write with background copy) 。如果用Clone方式,那么第一个快照需要较长的初始化时间;如果用COW方式,数据卷的性能会降低。

  持续数据保护(CDP)

  CDP的出现是为了实现零数据丢失的RPO指标,以及瞬时数据恢复的RTO指标。它本身与同步数据镜像很类似,不同之处在于CDP还可以对软性灾难进行恢复。包括人为误操作、恶意软件***、意外删除、数据损坏等情况。

  持续数据保护颇像频率很高的增量快照。它会捕获并复制任何时刻发生的数据变化,并且给这些数据块打上时间戳。CDP本质上相当于每个时刻都创建一份增量快照,提供细粒度的精确数据恢复。有些CDP产品同时提供基于时间和基于事件(例如应用程序升级事件)两种粒度的恢复方式。还有一个理解CDP概念的好方法就是将它看成一个快照的journal日志。

  对于邮件系统、数据库和基于数据库的应用来说,CDP是一个极好的保护方案,能将数据回滚到任意的历史时间点,恢复过程也简便、迅速。最有代表性的CDP产品是飞康公司的IPStor,它是一个集成了CDP功能的存储系统兼存储虚拟化设备。

  随着越来越多的数据需要保护,备份窗口也变得越来越紧张,因此需要快照技术来帮助我们解决备份问题。在现实的应用环境中,快照利用的是否恰当对数据保护的等级和恢复的速度有着很大的影响。尽管各类型快照之间存在的技术差异不太容易理解,但无论如何,快照技术都将在数据保护领域和日常存储管理中扮演重要的角色。 

(三)、特别注意:快照的一致性问题

  如果用快照来处理结构化数据,可能会存在一些问题。结构化数据涉及到数据库,以及数据库类应用(例如邮件系统、ERP或CRM等等)。许多产品中的快照并不能与这些应用程序集成或被直接调用。有一种可能的情况是,在我们创建快照的瞬间,数据库恰好不在静止状态(缓存正在刷新、写操作事务尚未完成、索引和元数据正在更新等等),此刻生成的快照数据是不一致的,很有可能无法正常使用。

  在微软的Windows Server平台上,这个问题要简单得多,利用Windows Volume Shadow Copy Services (VSS)和它的API,数据库应用程序可以集成并调用快照工具。VSS是专门为结构化数据应用设计的服务框架,可以驱动数据库等应用进入数据一致性的静止状态,在快照开始初始化之前,完成刷新缓存、结束写操作以及系统状态的更新。

  遗憾的是,目前在Linux和Unix操作系统平台上还没有类似VSS的服务或API。VMware公司的vCenter storage API可以说是一个部分解决方案。快照的发起者可以通过vCenter storage API给vCenter发出一个指令,让虚拟机进入静止状态,然后再执行快照。但这个时候,快照由于没有通过应用程序感知,也许会存在不一致的问题。

这里还有一个好办法,可以不通过Windows VSS,获得数据库的一致性快照。这个办法需要备份软件的配合。将快照的API同备份软件集成,就可以从备份服务器端驱动备份软件的数据库代理Agent。Agent备份代理程序可以驱动数据库进入静止状态,然后反向让备份服务器通知快照工具开始执行创建快照的操作。这也是一个比较有效的办法。 


(四)、快照技术使用方法

具体使用快照时,存储管理员可以有三种形式,即冷快照拷贝、暖快照拷贝和热快照拷贝。

  冷快照拷贝:进行冷快照拷贝是保证系统可以被完全恢复的最安全的方式。在进行任何大的配置变化或维护过程之前和之后,一般都需要进行冷拷贝,以保证完全的恢复原状(rollback)。冷拷贝还可以与克隆技术相结合复制整个服务器系统,以实现各种目的,如扩展、制作生产系统的复本供测试/开发之用以及向二层存储迁移。

  暖快照拷贝:暖快照拷贝利用服务器的挂起功能。当执行挂起行动时,程序计数器被停止,所有的活动内存都被保存在引导硬盘所在的文件系统中的一个临时文件(.vmss文件)中,并且暂停服务器应用。在这个时间点上,复制整个服务器(包括内存内容文件和所有的LUN以及相关的活动文件系统)的快照拷贝。在这个拷贝中,机器和所有的数据将被冻结在完成挂起操作时的处理点上。

  当快照操作完成时,服务器可以被重新启动,在挂起行动开始的点上恢复运行。应用程序和服务器过程将从同一时间点上恢复运行。从表面上看,就好像在快照活动期间按下了一个暂停键一样。对于服务器的网络客户机看来,就好像网络服务暂时中断了一下一样。对于适度加载的服务器来说,这段时间通常在30到120秒。

  热快照拷贝:在这种状态下,发生的所有的写操作都立即应用在一个虚拟硬盘上,系统的文件以保持高度的一致性。服务器提供让持续的虚拟硬盘处于热备份模式的工具,以通过添加REDO日志文件在硬盘子系统层上复制快照拷贝。

  一旦REDO日志被激活,复制包含服务器文件系统的LUN的快照是安全的。在快照操作完成后,可以发出另一个命令,这个命令将REDO日志处理提交给下面的虚拟硬盘文件。当提交活动完成时,所有的日志项都将被应用,REDO文件将被删除。在执行这个操作过程中,会出现处理速度的略微下降,不过所有的操作将继续执行。但是,在多数情况下,快照进程几乎是瞬间完成的,REDO的创建和提交之间的时间非常短。热快照操作过程从表面上看基本上察觉不到服务器速度下降。在最差情况下,它看起来就是网络拥塞或超载的CPU可能造成的一般服务器速度下降。在最好情况下,不会出现可察觉到的影响。 


(五)、快照与镜像、复制的区别

镜像、快照和复制是三种不同的功能

  镜像是通过从一个I/O创建两个I/O来复制数据。磁盘镜像通过OS或卷管理软件在主系统上创建。磁盘镜像是依靠平台和本地连接特性的本地选件。镜像可用于DAS和SAN并且大多数NAS支持它。存储转发式镜像磁盘子系统(例如,EMC SRDF, IBM PPRC, Hitachi TrueCopy)主要用于SAN产品。  复制是通过网络传输数据对象(文件、表格等)。传输是从系统到系统进行的,而不是在存储设备之间或子系统之间进行。复制一般也针对具体平台,因此用于Windows 2000复制产品的运行方式与Unix平台存在很大不同。


二、总结:


逻辑卷的作用与原理

  LVM采用写时复制技术(Copy-On-Write,COW),不用停止服务或将逻辑卷设为只读就可以进行备份,使用LVM快照功能既可以获得一致备份,又不会影响服务器的可用性。

  LVM采用的写时复制,是指当LVM快照创建的时候,仅复制原始卷中数据的元数据。换句话说,也就是在创建LVM逻辑卷的时候,并不会发生数据的物理复制。再换句话说,复制元数据,不复制物理数据.因此快照的创建几乎是实时的。当原始卷上有写的操作执行时,快照会跟踪原始卷中块的改变,这个时候原始卷上将要改变的数据会在改变之前拷贝到快照预留的空间。

逻辑卷管理器快照

  快照是特殊的逻辑卷,它是在生成快照时存在的逻辑卷的准确拷贝

     对于需要备份或者复制的现有数据集临时拷贝以及其它操作来说,快照是最合适的选择。

  LVM 快照通过把文件系统的改变记录到一个快照分区,而不是对这个分区做镜像.因此当你创建一个快照分区时,你不需要使用和你正创建快照的分区一样大小的分区, 而是在做快照过程中需要改变的大小.这取决于有多少数据正在写入分区和你希望保留LVM快照多长 时间. 你保留的时间越长,在文件系统的的改变越多,更多的快照分区就会被填充改变的信息.在分区上的改变率越高,快照的平均生命期越短.如果一个LVM分区的改变量超过了快照的大小,那么快照就会被释放.

   因此:谨记以下原则

   快照只有在它们和原来的逻辑卷不同时才会消耗空间。

   在生成快照时会分配给它一定的空间,但只有在原来的逻辑卷或者快照有所改变才会使用这些空间

   当原来的逻辑卷中有所改变时,会将旧的数据复制到快照中。

   快照中只含有原来的逻辑卷中更改的数据或者自生成快照后的快照中更改的数据

   建立快照的卷大小只需要原始逻辑卷的15%~20%就够了。也可以使用lvextend放大快照。

   快照逻辑卷大小最大何其对应快照的原始逻辑卷大小相同,过大会造成磁盘空间浪费


逻辑卷管理器快照

快照就是将当时的系统信息记录下来,就好像照相一般,若将来有任何数据改动了,则原始数据会被移动到快照区,没有改动的区域则由快照区和文件系统共享。

wKiom1fJcP6SRMumAAB3kEClOLs594.png

   由于快照区与原本的LV共用很多PE的区块,因此快照去与被快照的LV必须要要在同一个VG上!系统恢复的时候的文件数量不能高于快照区的实际容量。



使用LVM快照

为现有逻辑卷创建快照

          #lvcreate -L #[mMgGtT] -s -n snap-data -p r original_lv_name

   挂载快照

          #mkdir -p /mnt/snap

          #mount -o ro /dev/vg0/snap-data /mnt/snap

   删除快照

          #umount /mnt/databackup

          #lvremove /dev/vg0/databackup


三、练习

1、创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录

[root@localhost ~]# fdisk /dev/sdc
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x8b86db85 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (20973568-41943039,默认为 20973568):
将使用默认值 20973568
Last 扇区, +扇区 or +size{K,M,G} (20973568-41943039,默认为 41943039):+10G
值超出范围。
Last 扇区, +扇区 or +size{K,M,G} (20973568-41943039,默认为 41943039):q
Last 扇区, +扇区 or +size{K,M,G} (20973568-41943039,默认为 41943039):
您确实要退出吗?q
Last 扇区, +扇区 or +size{K,M,G} (20973568-41943039,默认为 41943039):       
将使用默认值 41943039
分区 2 已设置为 Linux 类型,大小设为 10 GiB

命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):1
Hex 代码(输入 L 列出所有代码):l

 0  空              24  NEC DOS         81  Minix / 旧 Linu bf  Solaris        
 1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 扩展      c7  Syrinx         
 5  扩展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系统数据 
 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 纯文本    de  Dell 工具      
 8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt         
 9  AIX 可启动      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 访问       
 a  OS/2 启动管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 扩展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
11  隐藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq 诊断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  隐藏的 FAT16 <3 61  SpeedStor       ab  Darwin 启动     f2  DOS 次要       
16  隐藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  隐藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自动
1b  隐藏的 W95 FAT3 70  DiskSecure 多启 bb  Boot Wizard 隐  fe  LANstep        
1c  隐藏的 W95 FAT3 75  PC/IX           be  Solaris 启动    ff  BBT            
1e  隐藏的 W95 FAT1 80  旧 Minix       
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0  200M  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    4G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   20G  0 part /testdir
sdb      8:16   0  200G  0 disk 
sdc      8:32   0   20G  0 disk 
├─sdc1   8:33   0   10G  0 part 
└─sdc2   8:34   0   10G  0 part 
sdd      8:48   0   20G  0 disk 
sde      8:64   0   20G  0 disk 
sdf      8:80   0   20G  0 disk 
sr0     11:0    1  7.2G  0 rom  /run/media/root/CentOS 7 x86_64
[root@localhost ~]# pvcreate /dev/sdc{1,2}
WARNING: ext4 signature detected on /dev/sdc1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdc1.
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdc1       lvm2 ---  10.00g 10.00g
  /dev/sdc2       lvm2 ---  10.00g 10.00g
[root@localhost ~]# vgcreate -s 16M testvg /dev/sdc{1,2}
  Volume group "testvg" successfully created
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   0   0 wz--n- 19.97g 19.97g
[root@localhost ~]# lvcreate -L 5G -n testlv testvg 
  Logical volume "testlv" created.
[root@localhost ~]# lvs
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a----- 5.00g  
[root@localhost ~]# mkdir /users
[root@localhost ~]# mkfs.ext4 /dev/testvg/testlv
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 
[root@localhost ~]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Tue Jul 26 04:42:29 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=68200b07-fec2-4be9-95a7-79fba9e46abf /                       xfs     defaults        0 0
UUID=de6b3e61-2dd2-4699-82c2-cb20d4b3ea1f /boot                   xfs     defaults        0 0
UUID=b43f466d-a800-45b2-abb7-956252340786 /testdir                xfs     defaults        0 0
UUID=ee28f7a7-70a5-4f52-a3c2-887e1edf2bae swap                    swap    defaults        0 0 
UUID="dc3eb62d-b18c-4ec2-8f89-6bb69264121a"     /users  ext4    defaults        0       0
[root@localhost ~]# mount /dev/testvg/testlv /users/

2、 新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录

[root@localhost ~]# useradd -b /users  archlinux
[root@localhost ~]# getent passwd |grep "archlinux"
archlinux:x:1001:1001::/users/archlinux:/bin/bash
[root@localhost ~]# su archlinux
[archlinux@localhost root]$ cp -r /etc/pam.d /users/archlinux
[archlinux@localhost root]$ exit
exit
[root@localhost ~]# cd /users/archlinux
[root@localhost archlinux]# ls
pam.d
[root@localhost archlinux]# cd ./pam.d/
[root@localhost pam.d]# ls
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd

3、扩展testlv至7G,要求archlinux用户的文件不能丢失

依据上题

[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   1   0 wz--n- 19.97g 14.97g
[root@localhost ~]# lvs
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-ao---- 5.00g 
[root@localhost ~]# lvextend -L +2G /dev/testvg/testlv
  Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents).
  Logical volume testlv successfully resized.
[root@localhost ~]# lvs
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-ao---- 7.00g  
[root@localhost ~]# df
文件系统                   容量  已用  可用 已用% 挂载点
/dev/sda2                  100G  4.1G   96G    5% /
devtmpfs                   899M     0  899M    0% /dev
tmpfs                      913M   88K  913M    1% /dev/shm
tmpfs                      913M   21M  893M    3% /run
tmpfs                      913M     0  913M    0% /sys/fs/cgroup
/dev/sda5                   20G   33M   20G    1% /testdir
/dev/sda1                  197M  139M   59M   71% /boot
tmpfs                      183M   12K  183M    1% /run/user/0
/dev/sr0                   7.3G  7.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/testvg-testlv  4.8G   21M  4.6G    1% /users
[root@localhost ~]# resize2fs /dev/testvg/testlv 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/testvg/testlv is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/testvg/testlv is now 1835008 blocks long.

[root@localhost ~]# df
文件系统                   容量  已用  可用 已用% 挂载点
/dev/sda2                  100G  4.1G   96G    5% /
devtmpfs                   899M     0  899M    0% /dev
tmpfs                      913M   88K  913M    1% /dev/shm
tmpfs                      913M   21M  893M    3% /run
tmpfs                      913M     0  913M    0% /sys/fs/cgroup
/dev/sda5                   20G   33M   20G    1% /testdir
/dev/sda1                  197M  139M   59M   71% /boot
tmpfs                      183M   12K  183M    1% /run/user/0
/dev/sr0                   7.3G  7.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/testvg-testlv  6.8G   23M  6.4G    1% /users
验证数据是否损坏
[root@localhost pam.d]# ls
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd                  runuser           su

[root@localhost pam.d]# cat atd
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth

4、收缩testlv至3G,要求archlinux用户的文件不能丢失

[root@localhost ~]# umount /dev/testvg/testlv 
[root@localhost ~]# df
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda2       100G  4.1G   96G    5% /
devtmpfs        899M     0  899M    0% /dev
tmpfs           913M   88K  913M    1% /dev/shm
tmpfs           913M   21M  893M    3% /run
tmpfs           913M     0  913M    0% /sys/fs/cgroup
/dev/sda5        20G   33M   20G    1% /testdir
/dev/sda1       197M  139M   59M   71% /boot
tmpfs           183M   12K  183M    1% /run/user/0
/dev/sr0        7.3G  7.3G     0  100% /run/media/root/CentOS 7 x86_64

[root@localhost ~]# e2fsck -f /dev/testvg/testlv
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/testvg/testlv: 70/458752 files (0.0% non-contiguous), 67380/1835008 blocks
[root@localhost ~]# resize2fs /dev/testvg/testlv 3G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/testvg/testlv to 786432 (4k) blocks.
The filesystem on /dev/testvg/testlv is now 786432 blocks long.

[root@localhost ~]# lvreduce -L -4G /dev/testvg/testlv
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testlv? [y/n]: y
  Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents).
  Logical volume testlv successfully resized.
[root@localhost ~]# lvs
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a----- 3.00g                                                    
[root@localhost ~]# mount /dev/testvg/testlv /users/
[root@localhost pam.d]# df
文件系统                   容量  已用  可用 已用% 挂载点
/dev/sda2                  100G  4.1G   96G    5% /
devtmpfs                   899M     0  899M    0% /dev
tmpfs                      913M   88K  913M    1% /dev/shm
tmpfs                      913M   21M  893M    3% /run
tmpfs                      913M     0  913M    0% /sys/fs/cgroup
/dev/sda5                   20G   33M   20G    1% /testdir
/dev/sda1                  197M  139M   59M   71% /boot
tmpfs                      183M   12K  183M    1% /run/user/0
/dev/sr0                   7.3G  7.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/testvg-testlv  2.9G   16M  2.7G    1% /users
[root@localhost ~]# cd /users/archlinux/pam.d/
[root@localhost pam.d]# ls
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd                  runuser           su                 xserver
[root@localhost pam.d]# cat atd 
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth

5、对testlv创建快照,并尝试基于快照备份数据,验正快照的功能

依据之前

[root@localhost ~]# lvcreate -L 1G -s -n testlv-snap -p r /dev/testvg/testlv
  Logical volume "testlv-snap" created.
[root@localhost ~]# mkdir /mnt/snap
[root@localhost ~]# mount -o ro /dev/testvg/testlv-snap /mnt/snap/

[root@localhost ~]# ls /mnt/snap/archlinux/pam.d/
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd                  runuser           su  
[root@localhost ~]# cat /mnt/snap/archlinux/pam.d/atd
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth 
[root@localhost ~]# echo "1234567890" >>/users/archlinux/pam.d/atd
[root@localhost ~]# cat /mnt/snap/archlinux/pam.d/atd
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth
[root@localhost ~]# cat /users/archlinux/pam.d/atd
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth
1234567890
[root@localhost ~]# rm -rf /users/archlinux/pam.d
[root@localhost ~]# ll  /users/archlinux
总用量 0
[root@localhost ~]# ls /mnt/snap/archlinux/pam.d/
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd                  runuser           su  
[root@localhost ~]# cp -a -r /mnt/snap/archlinux/pam.d /users/archlinux/
[root@localhost ~]# ls /users/archlinux/pam.d/
atd                  gdm-fingerprint         password-auth     runuser-l          sudo
chfn                 gdm-launch-environment  password-auth-ac  screen             sudo-i
chsh                 gdm-password            pluto             setup              su-l
config-util          gdm-pin                 polkit-1          smartcard-auth     system-auth
crond                gdm-smartcard           postlogin         smartcard-auth-ac  system-auth-ac
cups                 liveinst                postlogin-ac      smtp               systemd-user
fingerprint-auth     login                   ppp               smtp.postfix       vlock
fingerprint-auth-ac  other                   remote            sshd               vmtoolsd
gdm-autologin        passwd                  runuser           su                 xserver
[root@localhost ~]# cat /users/archlinux/pam.d/atd 
# The PAM configuration file for the at daemon
#
#
auth       required    pam_env.so
auth       include     password-auth
account    required    pam_access.so
account    include     password-auth
session    required    pam_loginuid.so
session    include     password-auth