逻辑卷管理

本文聚焦Linux系统中逻辑卷的管理,介绍了逻辑卷的概念,其空间可动态扩大或缩小。详细阐述了创建逻辑卷的步骤,包括创建物理卷、卷组和逻辑卷。还说明了逻辑卷的扩展、缩小、恢复操作,以及逻辑卷快照的原理和使用方法,可用于数据备份和恢复。

 本章主要介绍逻辑卷的管理。

        了解什么是逻辑卷 

        创建和删除逻辑卷

        扩展逻辑卷 缩小逻辑卷

        逻辑卷快照的使用

        前面介绍了分区的使用,如果某个分区空间不够,想增加空间是非常困难的。所以,建议尽可能使用逻辑卷而非普通的分区,因为逻辑卷的特点是空间可以动态地扩大或缩小。

1 了解逻辑卷

逻辑卷如图所示

        这里有三个大小为10G的分区,然后将这些分区加工变成PV(物理卷),它们就可以合体成一个大小为30G的虚拟硬盘,这个虚拟硬盘叫作VG(卷组)。然后在这个虚拟硬盘(卷组)上划分一个个分区(逻辑卷),如图所示。

        这个逻辑卷是可变大、可缩小的,最大可以占用整个卷组的空间,即30G。如果逻辑卷还 不够,可以继续找一个硬盘加入卷组中,如图所示 

         假设这里又在卷组中加了一个20G的分区,此时卷组的大小为50G,逻辑卷就可以继续扩展了。如果卷组不需要那么大空间,可以把新增加的硬盘从卷组中分离出去,如图所示。

        用户直接格式化挂载逻辑卷即可,不必关心写入逻辑卷中的数据最终是写入第一个分区还 是第二个分区

        创建逻辑卷的整个过程如下。

        (1)创建物理卷PV。

        (2)创建卷组VG。

        (3)创建逻辑卷LV。

下面介绍物理卷和卷组。

        首先通过pvs或pvscan查看现在系统中是否存在PV,命令如下。

[root@redhat8 ~]# pvs
[root@redhat8 ~]# pvscan
 No matching physical volumes found

        没有任何输出,说明现在还不存在任何PV,所以需要先创建PV。首先看一下分区情况,命令如下。

[root@redhat8 ~]# fdisk -l /dev/sdc

         前面已经把sdc5~sdc7的分区类型转变为Linux LVM了。下面我们把/dev/sdc5~/dev/sdc7创建为PV,命令如下。

[root@redhat8 ~]# pvcreate /dev/sdc{5..7}
  Physical volume "/dev/sdc5" successfully created.
  Physical volume "/dev/sdc6" successfully created.
  Physical volume "/dev/sdc7" successfully created.

        删除PV用 pvremove命令。例如,删除/dev/sdc7,则用pvremove /dev/sdb7命令,命令如下。

[root@redhat8 ~]# pvremove /dev/sdc7
  Labels on physical volume "/dev/sdc7" successfully wiped.

        再次把/dev/sdc7转变为PV,命令如下。

[root@redhat8 ~]# pvcreate /dev/sdc7
  Physical volume "/dev/sdc7" successfully created.

        现在查看PV,命令如下。

[root@redhat8 ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdc5       lvm2 ---    2.00g 2.00g
  /dev/sdc6       lvm2 ---    2.00g 2.00g
  /dev/sdc7       lvm2 ---    2.00g 2.00g

         当然,也可以通过pvscan命令来查看,从上面可以看到VG列是空的,也就是这些PV都没有加人任何VG。下面开始创建VG,首先通过vgs或vgscan查看是否存在VG,命令如下。

[root@redhat8 ~]# vgs
[root@redhat8 ~]# vgscan 

        没有任何输出,说明此时不存在VG。下面把/dev/sdc5、/dev/sdc6组成一个名称为vg0的VG,命令如下

[root@redhat8 ~]# vgcreate vg0 /dev/sdc5 /dev/sdc6
  Volume group "vg0" successfully created

这个命令可以用 vgcreate vg0 /dev/sdc{5,6}替代。再次查看现有的VG,命令如下。

[root@redhat8 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    2   0   0 wz--n-   3.99g 3.99g

        可以看到,VG由2个PV组成,因为每个PV的大小为2G,所以VG的大小约为4G。再次查看PV的信息,命令如下。

[root@redhat8 ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree 
  /dev/sdc5  vg0  lvm2 a--   <2.00g <2.00g
  /dev/sdc6  vg0  lvm2 a--   <2.00g <2.00g
  /dev/sdc7       lvm2 ---    2.00g  2.00g

        可以看到,/dev/sdc5和/dev/sdc6现在是在vg0中的,但是/dev/sdc7不是。如果vg0的空间不够了,可以为 vg0增加空间。例如,把/dev/sdc7加过去,命令如下。

[root@redhat8 ~]# vgextend vg0 /dev/sdc7
  Volume group "vg0" successfully extended

 这样就把/dev/sdc7加到vg0中了,再次查看VG的信息,命令如下。

[root@redhat8 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree 
  vg0    3   0   0 wz--n-  <5.99g <5.99g

        可以看到, VG现在由3个PV组成,大小约为6G。如果空间又不够了,还可以增加硬盘,继续添加到vg0中。如果此时想把/dev/sdc7 从卷组中去除,则用vgreduce命令,命令如下。

[root@redhat8 ~]# vgreduce vg0 /dev/sdc7
  Removed "/dev/sdc7" from volume group "vg0"

         使用vgdisplay命令会显示所有卷组的详细信息,如果只想显示特定的某个卷组的详细信息,则用“vgdisplay卷组名”命令。例如,现在要显示vg0的详细信息,命令如下。

[root@redhat8 ~]# vgdisplay vg0

 

        上面的代码中有一个关键信息叫PE Size,PE的意思是物理扩展,是分配给逻辑卷的最小单位,即逻辑卷的大小是PE的整倍数。如果创建逻辑卷时指定的大小不是PE的整倍数,例如,创建一个大小为98M的逻辑卷,而每个PE是4M,因为98M有24.5个PE,此时系统会自动把逻辑卷创建为100M、即25个PE,如下所示。

[root@redhat8 ~]# lvcreate -L 98M -n lv0 vg0
  Rounding up size to full physical extent 100.00 MiB
  Logical volume "lv0" created

 删除此LV,命令如下

[root@redhat8 ~]# lvremove -f /dev/vg0/lv0
  Logical volume "lv0" successfully removed.

        PE的大小只能在创建VG时用-s选项来指定,不可以后期修改。重命名VG用vgrename命令。例如,把 vg0重命名为myvg,命令如下。

[root@redhat8 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    2   0   0 wz--n-   3.99g 3.99g
[root@redhat8 ~]# vgrename vg0 myvg
  Volume group "vg0" successfully renamed to "myvg"
[root@redhat8 ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  myvg   2   0   0 wz--n-   3.99g 3.99g

除VG用vgremove命令。例如,现在把myvg删除,命令如下。

[root@redhat8 ~]# vgremove myvg
  Volume group "myvg" successfully removed
[root@redhat8 ~]# vgs
2 创建逻辑卷

        首先通过lvscan或lvs查看现在系统中是否存在逻辑卷,命令如下。

[root@redhat8 ~]# lvscan
[root@redhat8 ~]# lvs

        没有任何输出,说明现在还不存在任何逻辑卷。下面用 Ivereate命令创建逻辑卷,语法如下。

lvcreate ‐L 大小 ‐n 名称 卷组
需要注意的是,这里是大写字母L,用于指定大小
或
lvcreate ‐l pe数 ‐n 名称 卷组
需要注意的是,这里是小写字母1,用于指定PE数
或
lvcreate ‐l 数字%free ‐n 名称 卷组

        现在在vg0上创建一个大小为200M的逻辑卷lv0并查看逻辑卷的信息,命令如下。

[root@redhat8 ~]# lvcreate -L 200M -n lv0 vg0
 Logical volume "lv0" created.
[root@redhat8 ~]# lvscan 
  ACTIVE            '/dev/vg0/lv0' [200.00 MiB] inherit

        可以看到,访问逻辑卷的方式为/dev/卷组名/逻辑卷,这里是/dev/vg0/lv0,大小为 200M。

        再创建一个包含25个PE、名称为lv1的逻辑卷,命令如下。

[root@redhat8 ~]# lvcreate -l 50 -n lv1 vg0
  Logical volume "lv1" created.

查看逻辑卷的信息,命令如下。

[root@redhat8 ~]# lvscan 
  ACTIVE            '/dev/vg0/lv0' [200.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv1' [200.00 MiB] inherit

        因为每个P阳大小为4M,50个PE总共为200M。 创建一个逻辑卷lv2,大小为剩余空间的25%,命令如下。

[root@redhat8 ~]# lvcreate -l 25%free -n lv2 vg0
  Logical volume "lv2" created.

 创建一个逻辑卷lv3,使用剩余所有空间,命令如下。

[root@redhat8 ~]# lvcreate -l 100%free -n lv3 vg0
  Logical volume "lv3" created.

现在查看一下现有逻辑卷,命令如下。

[root@redhat8 ~]# lvscan
  ACTIVE            '/dev/vg0/lv0' [200.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv1' [200.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv2' [<1.40 GiB] inherit
  ACTIVE            '/dev/vg0/lv3' [<4.20 GiB] inherit

        显示逻辑卷的详细信息可以用Ivdisplay命令,这样会显示所有逻辑卷的信息,如果想要查看某个逻辑卷的详细信息,则用“lvdisplay 逻辑卷名”命令。例如,查看/dev/vg0/lv0的详细信息,命令如下。

[root@redhat8 ~]# lvdisplay /dev/vg0/lv0

        删除逻辑卷用“lvremove逻辑卷名”命令。例如,删除/dev/vg0/lv3,命令如下。

[root@redhat8 ~]# lvremove /dev/vg0/lv3
Do you really want to remove active logical volume vg0/lv3? [y/n]: y
  Logical volume "lv3" successfully removed.

        此处必须输入y或n,y表示确定删除。如果想直接删除,可以加上-f选项表示强制删除。例如,现在把lv2删除,命令如下。

[root@redhat8 ~]# lvremove -f /dev/vg0/lv2
  Logical volume "lv2" successfully removed.

查看逻辑卷的信息,命令如下。

[root@redhat8 ~]# lvscan
  ACTIVE            '/dev/vg0/lv1' [200.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv0' [200.00 MiB] inherit

下面将这两个逻辑卷分别用XFS 和 EXT4文件系统进行格式化,命令如下。

[root@redhat8 ~]# mkfs.xfs /dev/vg0/lv0
[root@redhat8 ~]# mkfs.ext4 /dev/vg0/lv1

然后创建两个目录/lv0-xfs 和/lv1-ext4,分别挂载/dev/vg0/lv0和 /dev/vg0/lv1,命令如下。

[root@redhat8 ~]# mkdir /lv0-xfs /lv1-ext4
[root@redhat8 ~]# mount /dev/vg0/lv0 /lv0-xfs/
[root@redhat8 ~]# mount /dev/vg0/lv1 /lv1-ext4/

查看逻辑卷的挂载情况,命令如下。

[root@redhat8 ~]# df -TH | grep lv
/dev/mapper/vg0-lv0   xfs       205M   13M  192M    6% /lv0-xfs
/dev/mapper/vg0-lv1   ext4      199M  1.6M  183M    1% /lv1-ext4

注意

逻辑卷的命名也可以写成如下格式。

/dev/mapper/卷组名-逻辑卷名

 然后分别往两个挂载点中铂贝测试文件,命令如下。

[root@redhat8 ~]# cp /etc/hosts /etc/issue /lv0-xfs/
[root@redhat8 ~]# cp /etc/hosts /etc/issue /lv1-ext4/

2.1 逻辑卷扩大

        前面讲逻辑卷的优点在于可以动态地扩大或缩小,下面演示逻辑卷的扩大。首先查看当前逻辑卷和文件系统的大小,命令如下。

[root@redhat8 ~]# lvscan
  ACTIVE            '/dev/vg0/lv0' [200.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv1' [200.00 MiB] inherit
[root@redhat8 ~]# df -Th | grep lv
/dev/mapper/vg0-lv0           xfs       195M   12M  183M    6% /lv0-xfs
/dev/mapper/vg0-lv1           ext4      190M  1.6M  175M    1% /lv1-ext4

        可以看到,lv0和lv1的大小都是200M,里面的文件系统也为200M(显示为195M)。为了 更好地理解,可以将文件系统当成逻辑卷中的填充物,如图所示。

         里面灰色部分为文件系统,填充了整个逻辑卷。下面开始扩展逻辑卷,命令是lvextend, 用法如下。

lvextend ‐L +M ‐n逻辑卷 ‐‐这句话的意思是在原有的基础上加M
或
lvextend ‐L N ‐n 逻辑卷‐‐这句话的意思是不管原来是多大,现在变为N

        把 lv0 扩展到600M,命令如下。

[root@redhat8 ~]# lvextend -L +400M /dev/vg0/lv0
  Size of logical volume vg0/lv0 changed from 200.00 MiB (50 extents) to 600.00 MiB (150 extents).
  Logical volume vg0/lv0 successfully resized.

        这是在原有的基础上额外加400M,现在共600M。

        把 lv1 扩展到600M,命令如下。

[root@redhat8 ~]# lvextend -L 600M /dev/vg0/lv1
  Size of logical volume vg0/lv1 changed from 200.00 MiB (50 extents) to 600.00 MiB (150 extents).
  Logical volume vg0/lv1 successfully resized.

        这里不带“+”,直接写600M意思是不管原来是多大,现在扩展到600M。查看大小,命令如下。

[root@redhat8 ~]# lvscan 
  ACTIVE            '/dev/vg0/lv0' [600.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv1' [600.00 MiB] inherit

        现在查看一下文件系统的大小,命令如下。

[root@redhat8 ~]# df -Th | grep lv
/dev/mapper/vg0-lv0           xfs       195M   12M  184M    6% /lv0-xfs
/dev/mapper/vg0-lv1           ext4      190M  1.6M  175M    1% /lv1-ext4

        会发现还是200M,这是为何?需要卸载重新挂载吗?不需要,如图所示。

 

         刚才讲了为了便于理解,把文件系统当成填充物,右侧是逻辑卷新增加的400M空间,这里面没有文件系统,只有前面200M的逻辑卷中才有文件系统。所以,现在要做的就是扩展文件系统,直到把多增加的400M逻辑卷也填充满为止,如图所示

         这样文件系统的大小也是600M了,扩展文件系统的命令如下。

XFS文件系统使用xfs_growfs,用法xfs_growfs/挂载点
EXT4文件系统用resize2fs,用法resize2fs逻辑卷名#注意,不是挂载点

        下面开始扩展lv0的文件系统大小,命令如下。

[root@redhat8 ~]# xfs_growfs /lv0-xfs/

        扩展lv1的文件系统大小,命令如下。

[root@redhat8 ~]# resize2fs /dev/vg0/lv1

        可以看到,已经成功扩展了,在整个扩展过程中并没有先卸载,这种叫作在线扩展。现在测试一下里面的文件是否被损坏,命令如下。

[root@redhat8 ~]# cat /lv0-xfs/issue 
\S
Kernel \r on an \m

注意

        在使用 Ivextend命令时,可以加上 -r 选项,这样在扩展逻辑卷的同时会把文件系统(XFS,EXT4等) 一并扩展了。

 2.2 逻辑卷的缩小

        非常不建议对逻辑卷做缩小的操作,但是如果必须缩小,一定要先缩小文件系统,然后再缩小逻辑卷,否则会破坏文件系统,如图15-8所示。

        原来的文件系统和逻辑卷是贴合的,如果先把逻辑卷缩小了,则文件系统会多出来一块,没有承载体,整个文件系统就会被破坏,所以一定要先缩小文件系统,然后再缩小逻辑卷。不过对于XFS 文件系统来说是不支持缩小的,这里使用EXT4来演示。

        下面开始进行缩小的操作,缩小文件系统请严格按照下面的步骤进行操作。

        步骤①:卸载文件系统,命令如下。

[root@redhat8 ~]# umount /lv1-ext4 

        步骤②:对文件系统进行fsck检查,命令如下。

[root@redhat8 ~]# fsck -f /dev/vg0/lv1
fsck,来自 util-linux 2.32.1
e2fsck 1.45.6 (20-Mar-2020)
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
/dev/mapper/vg0-lv1:13/153600 文件(0.0% 为非连续的), 25795/614400 块

        步骤③:缩小文件系统,命令如下。

[root@redhat8 ~]# resize2fs /dev/vg0/lv1 200M
resize2fs 1.45.6 (20-Mar-2020)
将 /dev/vg0/lv1 上的文件系统调整为 204800 个块(每块 1k)。
/dev/vg0/lv1 上的文件系统现在为 204800 个块(每块 1k)

        这里200M指的是最终的大小,即文件系统被减掉了400M。

        步骤④:减小逻辑卷,逻辑卷最终的大小要大于等于200M,即减掉的值不能超过600M。命令如下

[root@redhat8 ~]# lvreduce -L -400M /dev/vg0/lv1
  WARNING: Reducing active logical volume to 200.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv1? [y/n]: y
  Size of logical volume vg0/lv1 changed from 600.00 MiB (150 extents) to 200.00 MiB (50 extents).
  Logical volume vg0/lv1 successfully resized.

        这里给了一次警告,提示“如果你减小逻辑卷可能会损坏数据,你是否要继续”,输入“y”并按【Enter】键

        现在重新挂载逻辑卷验证,命令如下。

[root@redhat8 ~]# mount /dev/vg0/lv1 /lv1-ext4/
[root@redhat8 ~]# df -Th | grep lv1
/dev/mapper/vg0-lv1           ext4      190M  1.6M  176M    1% /lv1-ext4
[root@redhat8 ~]# lvscan | grep lv1
  ACTIVE            '/dev/vg0/lv1' [200.00 MiB] inherit

        可以看到,逻辑卷和文件系统的大小均为200M。验证里面的文件是否被损坏,命令如下。

[root@redhat8 ~]# cat /lv1-ext4/issue 
\S
Kernel \r on an \m

        依然是可以访问的。

2.3 恢复逻辑卷

        当在逻辑卷中存储数据时,数据是写入底层的PV中的,所以即使删除了逻辑卷,也并没有删除存储在PV中的数据。如果恢复删除的逻辑卷,仍然能看到逻辑卷中原有的数据。

        前面已经创建了逻辑卷lv1,里面有几个文件,现在卸载并把此逻辑卷删除,命令如下。

[root@redhat8 ~]# umount /lv1-ext4 
[root@redhat8 ~]# lvremove -f /dev/vg0/lv1
  Logical volume "lv1" successfully removed.
[root@redhat8 ~]# lvscan | grep lv1
[root@redhat8 ~]# 

         下面开始恢复。我们在卷组上做过的所有操作均有日志记录,可以通过“vgcfgrestore --list卷组名”来查看。现在查看vg0的所有日志记录,命令如下。

[root@redhat8 ~]# vgcfgrestore --list vg0
 File:		/etc/lvm/archive/vg0_00006-328118769.vg
  VG name:    	vg0
  Description:	Created *before* executing 'lvremove -f /dev/vg0/lv1'
  Backup Time:	Sun Dec 10 16:05:00 2023

         可以看到,执行Ivremove -f /dev/vg0/Iv1命令之前的日志文件是 letclvm/archive/vg0_00006-328118769.vg,那么就可以利用这个文件对LV进行恢复。恢复命令是vgcfgrestore,语法如下。

vgcfgrestore ‐f 日志文件卷组名

        下面开始恢复vg0,命令如下。

[root@redhat8 ~]# vgcfgrestore -f /etc/lvm/archive/vg0_00006-328118769.vg vg0
  Volume group vg0 has active volume: lv0.
  WARNING: Found 1 active volume(s) in volume group "vg0".
  Restoring VG with active LVs, may cause mismatch with its metadata.
Do you really want to proceed with restore of volume group "vg0", while 1 volume(s) are active? [y/n]: y
  Restored volume group vg0.

        查看逻辑卷的信息,命令如下。

[root@redhat8 ~]# lvscan | grep lv1
  inactive          '/dev/vg0/lv1' [200.00 MiB] inherit

        可以看到,现在已经恢复出来了,但是状态为inactive,即不活跃状态,所以现在需要激活它,命令如下。

[root@redhat8 ~]# lvchange -ay /dev/vg0/lv1
[root@redhat8 ~]# lvscan | grep lv1
  ACTIVE            '/dev/vg0/lv1' [200.00 MiB] inherit

        这里-ay的意思是 active yes,表明已经成功激活,然后挂载查看里面的文件,命令如下。

[root@redhat8 ~]# mount /dev/vg0/lv1 /lv1-ext4/
[root@redhat8 ~]# ls /lv1-ext4/
hosts  issue  lost+found

        依然是可以正常访问的。

.2.4 逻辑卷的快照

        为了备份逻辑卷中的数据,可以通过对逻辑卷做快照 来实现,快照的原理如图所示。

        现在有一个逻辑卷lv0,这个文件中有3个文件hosts、issue、 file,然后对这个逻辑卷做快照 Iv0_snap(记住不要对快照格式化)。用户访同lv0_snap时,发现v0中的内容在Iv0_snap中都有,例如,在lv0_snap中也能看到hosts 等文件。

        但是此时在lv0_snap中看到的这些文件都只是一个影子而已(这个影子通过硬链接来实现),如同井中望月。所以,创建快照时,快照的空间可以很小,因为看到的内容并非真的存储在快照中。

        如果在快照中把 issue删除,也不会从原始逻辑卷中把 issue删除,只是把对应的映射删除而已,如图所示。

        如果在 lv0_snap中创建一个文件 file,则这个文件是保存在lv0_snap中的,占用1vO_snap的空间,并不会写入lv0,如图所示。

         所以,在快照中新增文件的总大小不能超过快照的大小。

        上面这种映射和原始文件之间的关系,采用的是写时复制(copy-on-write)策略。创建快照的语法如下。

lvcreate ‐L 大小 ‐n 名称 ‐s 逻辑卷

        现在为lv0创建一个名称为lv0_snap、大小为20M 的快照,命令如下。

[root@redhat8 ~]# lvcreate -L 20M -n lv0_snap -s /dev/vg0/lv0
  Logical volume "lv0_snap" created.

        查看逻辑卷的信息,命令如下。

[root@redhat8 ~]# lvscan
  ACTIVE   Original '/dev/vg0/lv0' [600.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv1' [200.00 MiB] inherit
  ACTIVE   Snapshot '/dev/vg0/lv0_snap' [20.00 MiB] inherit

        可以看到,/dev/vg0/lv0是原始逻辑卷,/dev/vg0/lv0_snap是快照。从哪里能看 到/dev/vg0/lv0_snap是/dev/vg0/lv0的快照呢?可以通过lvs命令来查看,命令如下。

[root@redhat8 ~]# lvs
  LV       VG           Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert                                            
  lv0      vg0          owi-aos--- 600.00m                                                    
  lv0_snap vg0          swi-a-s---  20.00m      lv0    0.00                                   
  lv1      vg0          -wi-ao---- 200.00m               

[root@redhat8 ~]# lvdisplay /dev/vg0/lv0_snap 

        把lv0_snap挂载到/snap目录上,命令如下。

[root@redhat8 ~]# mkdir /snap
[root@redhat8 ~]# mount -o nouuid /dev/vg0/lv0_snap /snap/
[root@redhat8 ~]# ls /snap/
hosts  issue

注意

(1)快照不需要格式化。

(2)因为原始逻辑卷的文件系统是XFS的,所以挂载快照时需要加上nouid选项。

         可以看到,/snap中有lv0的内容,但是这些内容并非存储在lv0_snap中的。在/snap下面再创建一个10M的测试文件,命令如下。

[root@redhat8 ~]# dd if=/dev/zero of=/snap/file bs=1M count=10
记录了10+0 的读入
记录了10+0 的写出
10485760 bytes (10 MB, 10 MiB) copied, 0.00315658 s, 3.3 GB/s

        这10M的文件占用的是快照lv0_snap的空间,并没有出现在lv0中,命令如下。

[root@redhat8 ~]# ls /lv0-xfs/
hosts  issue

        快照有什么用呢?假设原始逻辑卷中的数据被我们误删除了,那么可以利用快照恢复原始逻辑卷中的数据。

        先把lv0中的数据删除,命令如下。

[root@redhat8 ~]# rm -rf /lv0-xfs/*
[root@redhat8 ~]# ls /lv0-xfs/

        然后用lv0_snap恢复lv0中的数据。先卸载1v0_snap和 lv0,命令如下。

[root@redhat8 ~]# umount /snap 
[root@redhat8 ~]# umount /lv0-xfs 

        然后用Ivconvert命令恢复数据,命令如下。

[root@redhat8 ~]# lvconvert --merge /dev/vg0/lv0_snap 
  Merging of volume vg0/lv0_snap started.
  vg0/lv0: Merged: 100.00%

        这里后面指定了快照,即用哪个快照来恢复原始逻辑卷中的数据,现在看到已经恢复成功 了,验证命令如下。

[root@redhat8 ~]# mount /dev/vg0/lv0 /lv0-xfs/
[root@redhat8 ~]# ls /lv0-xfs/
file  hosts  issue

        可以看到,数据已经恢复出来了,且在快照中创建的文件也恢复到原始逻辑卷中了。通过这种用法,我们可以每天对某逻辑卷做快照,一旦数据丢失,就可以用快照来恢复数据了。

        再次查看逻辑卷的信息,命令如下。

[root@redhat8 ~]# lvscan
  ACTIVE            '/dev/vg0/lv0' [600.00 MiB] inherit
  ACTIVE            '/dev/vg0/lv1' [200.00 MiB] inherit

可以看到,快照lv0_snap已经没有了,因为它已经“牺牲”自己成全了lv0。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值