LVM快照

时间:2019-04-29 03:17:37  来源:igfitidea点击:

LVM快照用于获取逻辑卷的时间点快照。然后,可以使用这些快照将逻辑卷回滚到其时间点状态。快照是LVM的一项非常强大的功能。

如何创建LVM快照

创建快照,可以使用带有-s参数的lvcreate命令。 在继续进行之前,值得确认您的系统支持快照合并功能。最简单的检查方法是执行dmsetuptargets命令。然后,应从输出中查找一个状态为snapshot-merge的条目。例如,在SLES 11 sp2服务器中执行的结果:

ls001a:/ # dmsetup targets
mirror           v1.12.1
snapshot-merge   v1.1.0
snapshot-origin  v1.7.1
snapshot         v1.10.0
striped          v1.4.0
linear           v1.1.0
error            v1.0.1

快照命令示例:

lvcreate -n lvcopy -s /dev/vg01/lv01 -L 100M

上面的命令将创建一个名为lvcopy的新逻辑卷。该逻辑卷将是逻辑卷lv01的副本。上例中的快照大小为100MB。尽管它比逻辑卷lv01的大小小很多,但这是完全可以的,因为快照仅需约为原始逻辑卷大小的10%-20%。尽管快照较小,但在安装快照时,快照的大小将与原始逻辑卷相同。快照仅包含对原始逻辑卷所做的更改。换句话说,您的大部分数据仍保留在原始逻辑卷中,而快照中仅保留与之不同的数据。

快照示例

在进行任何更改或执行snap命令之前,最好查看一下物理卷,逻辑卷和卷组的当前状态。为此,我们可以执行pvsvgslvs命令:

ls001a:/ # pvs
  PV         VG       Fmt  Attr PSize   PFree
  /dev/sda2  system   lvm2 a-    15.84g    1.68g
  /dev/sdb2  lint01vg lvm2 a-    40.00g 1020.00m
  /dev/sdb5  vg01     lvm2 a-   968.00m  168.00m

ls001a:/ # vgs
  VG       #PV #LV #SN Attr   VSize   VFree
  lint01vg   1   1   0 wz--n-  40.00g 1020.00m
  system     1   4   0 wz--n-  15.84g    1.68g
  vg01       1   1   0 wz--n- 968.00m  168.00m

ls001a:/ # lvs
  LV         VG       Attr   LSize    Origin Snap%  Move Log Copy%  Convert
  lint01lv01 lint01vg -wi-ao   39.00g
  home       system   -wi-ao    5.00g
  root       system   -wi-ao    6.73g
  tst        system   -wi-ao 1000.00m
  swap       system   -wi-ao    1.46g
  lv01       vg01     -wi-ao  800.00m

我们将为其快照的逻辑卷称为lv01,它与卷组vg01相关联。

为了确定我们的设备/dev/vg01/lv01的挂载点在哪里,我们可以执行mount命令来列出当前挂载的文件系统:

/dev/mapper/vg01-lv01 on /john type ext3 (rw)

从输出中,我们可以看到安装点/john/dev/mapper/vg01-lv01一起使用。

对于我们的示例,我们将通过执行命令cd/john导航到目录/john

从该目录中,我们现在将复制一些文件以进行测试:

ls001a:/john # cp -R /home/john .

ls001a:/john # ls -l
total 20
drwxr-xr-x 5 root root  4096 Apr 15 09:44 john
drwx------ 2 root root 16384 Apr 15 09:38 lost+found

对于我们的示例,我已将目录/ home/john复制到我们的当前目录/john。我们的下一步是创建快照

创建快照

接下来,我们需要执行命令来创建快照:lvcreate -n lvcopy -s /dev/vg01/lv01 -L 100M

ls001a:/john # lvcreate -n lvcopy -s /dev/vg01/lv01 -L 100M
  Logical volume "lvcopy" created

要查看新的逻辑卷lvcopy,我们可以执行命令lvs

ls001a:/john/john # lvs
  LV         VG       Attr   LSize    Origin Snap%  Move Log Copy%  Convert
  lint01lv01 lint01vg -wi-ao   39.00g
  home       system   -wi-ao    5.00g
  root       system   -wi-ao    6.73g
  tst        system   -wi-ao 1000.00m
  swap       system   -wi-ao    1.46g
  lv01       vg01     owi-ao  800.00m
  lvcopy     vg01     swi-a-  100.00m lv01     0.01

从上面的输出中,我们可以看到快照lv01以及标题Snap%下正在使用的空间。

如果我们想查看快照的内容,则可以按常规方式安装它。在下面的示例中,我们创建了一个称为快照的挂载点:

ls001a:/ # mkdir snapshot
ls001a:/ # mount /dev/vg01/lvcopy /snapshot

ls001a:/ # df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/system-root          6.7G  4.8G  1.6G  76% /
devtmpfs                         2.0G  180K  2.0G   1% /dev
tmpfs                            2.0G  188K  2.0G   1% /dev/shm
/dev/sda1                        152M   36M  109M  25% /boot
/dev/mapper/system-home          4.0G  153M  3.6G   4% /home
/dev/mapper/lint01vg-lint01lv01   39G  437M   37G   2% /MySQL
/dev/mapper/system-tst           985M   18M  918M   2% /tst
/dev/mapper/vg01-lv01            788M   17M  731M   3% /john
/dev/mapper/vg01-lvcopy          788M   17M  731M   3% /snapshot

如果查看df -h命令的输出,我们可以看到/john/snapshot的大小相同。

现在,对原始逻辑卷区域/john进行一些更改。

ls001a:/john/john # ls -l
total 92
-rw------- 1 root root  1633 Apr 15 09:44 .bash_history
-rw-r--r-- 1 root root  1187 Apr 15 09:44 .bashrc
-rw-r--r-- 1 root root  1637 Apr 15 09:44 .emacs
drwxr-xr-x 2 root root  4096 Apr 15 09:44 .fonts
-rw-r--r-- 1 root root 18251 Apr 15 09:44 .gnu-emacs
-rw-r--r-- 1 root root   861 Apr 15 09:44 .inputrc
drwxr-xr-x 2 root root  4096 Apr 15 09:44 .mozilla
-rw-r--r-- 1 root root  6043 Apr 15 09:44 .muttrc
-rw-r--r-- 1 root root  1028 Apr 15 09:44 .profile
-rw------- 1 root root  3173 Apr 15 09:44 .viminfo
-rw-r--r-- 1 root root   849 Apr 15 09:44 .vimrc
-rw-r--r-- 1 root root  1940 Apr 15 09:44 .xim.template
-rwxr-xr-x 1 root root  1446 Apr 15 09:44 .xinitrc.template
drwxr-xr-x 2 root root  4096 Apr 15 09:44 bin
-rw-r--r-- 1 root root    28 Apr 15 09:44 list.txt
-rwxr-xr-x 1 root root   132 Apr 15 09:44 test.sh
-rw-r--r-- 1 root root  1660 Apr 15 09:44 test1.txt
-rw-r--r-- 1 root root  1660 Apr 15 09:44 test2.txt

ls001a:/john/john # rm -fr bin

卸载原始LV

从目录路径/john/john中,使用命令rm -fr bin删除了bin目录。如果我们需要恢复该目录,则现在可以使用快照。

首先,我们需要使用命令umount /dev/vg01/lv01卸载目标逻辑卷。

ls001a:/ # umount /dev/vg01/lv01

lvconvert-合并

现在,我们可以将原始逻辑卷恢复到时间点快照。为此,我们使用带有--merge选项的命令lvconvert。 要执行的命令:lvconvert --merge /dev/vg01/lvcopy

ls001a:/ # lvconvert --merge /dev/vg01/lvcopy
  Merging of volume lvcopy started.
  lv01: Merged: 0.1%
  lv01: Merged: 0.0%
  Merge of snapshot into logical volume lv01 has finished.
  Logical volume "lvcopy" successfully removed

运行lvconvert后,我们的快照将自动删除。现在,当我们运行快照时,逻辑卷lv01应该回到其状态。我们现在可以使用命令mount /dev/vg01/lv01/john再次安装LV。

如果看到错误无法合并打开的原始卷,则可能需要执行以下命令来停用和重新激活LV:

ls001a:/ # lvchange -an /dev/VolumeGroup/LogicalVolume
ls001a:/ # lvchange -ay /dev/VolumeGroup/LogicalVolume