一、几个概念
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
PV(Physical Volume)-物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。
VG(Volumne Group)-卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LV(Logical Volume)-逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
常用的LVM命令有:
功能/命令 | 物理卷管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
扫描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | vgextend | lvextend | |
缩小 | vgreduce | lvreduce |
助力理解:
举个例子,某村集资盖统一住宅区。我们知道,一家人一般会资金不足,不容易完成这样的工程,这里就可以类比为我们计算机磁盘空间不足。因此就需要召集大家来集资盖楼,每家所筹集的资金(物理卷PV,Physical Volume)集中起来形成一个资金池(卷组VG,VolumeGroup),楼房盖好之后,需要把房屋分给集资的人,每套房的价值(逻辑卷LV,Logical Volume)必须是人民币的基本单位元(基本单元PE,PhysicalExtent)的整数倍。
二、实验环境
操作系统:基于VmwareWorkstation 12 Pro虚拟化平台的CentOS Linux release 7.4.1708 (Minimal)
软件环境:2.02.171(2)-RHEL7(2017-05-03)(使用lvm version即可查看)
三、操作步骤
(一)不增加磁盘数量,在原磁盘上进行磁盘容量管理
1、关闭虚拟机电源->编辑虚拟机设置->硬盘->扩展。
原来的磁盘空间为10GB,扩展后磁盘容量为15GB。操作完成后系统会提示”磁盘已成功扩展。您必须从客户机操作系统内部对磁盘重新进行分区和扩展文件系统。”确认后进入下一步操作。
fdisk -l查看一下当前磁盘情况。
[root@Geeklp201 ~]#fdisk -l
磁盘 /dev/sda:16.1 GB, 16106127360字节,31457280个扇区
Units= 扇区of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512字节 / 512字节
I/O 大小(最小/最佳):512字节 / 512字节
磁盘标签类型:dos
磁盘标识符:0x00010056
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 20971519 10279936 8e Linux LVM
磁盘 /dev/mapper/centos-root:9449 MB,9449766912字节,18456576个扇区
Units= 扇区of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512字节 / 512字节
I/O 大小(最小/最佳):512字节 / 512字节
磁盘 /dev/mapper/centos-swap:1073 MB,1073741824字节,2097152个扇区
Units= 扇区of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512字节 / 512字节
I/O 大小(最小/最佳):512字节 / 512字节
我们可以看到磁盘空间扩展成功,/dev/sda设备的容量现在是16.1GB。
新建分区。
[root@Geeklp201~]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m获取帮助):n #新建一个分区
Partitiontype:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p #选择分区类型,默认为p
分区号 (3,4,默认 3): #默认为3,直接回车键
起始 扇区(20971520-31457279,默认为 20971520): #切勿乱填,选择默认值,直接回车键
将使用默认值 20971520
Last扇区, +扇区 or+size{K,M,G} (20971520-31457279,默认为 31457279): #按照提示操作,此处选择默认
将使用默认值 31457279
分区 3已设置为 Linux类型,大小设为 5 GiB
命令(输入 m获取帮助):l #列举已知的分区类型此处太长,省略
命令(输入 m获取帮助):t #改变系统分区系统id,对照上面列表进行填写
分区号 (1-3,默认 3): #采用默认值,直接回车
Hex代码(输入 L列出所有代码):8e #选择8e,Linux LVM
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m获取帮助):p #打印一下当前分区表
磁盘 /dev/sda:16.1 GB, 16106127360字节,31457280个扇区
Units=扇区of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512字节 / 512字节
I/O大小(最小/最佳):512字节 / 512字节
磁盘标签类型:dos
磁盘标识符:0x00010056
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
/dev/sda2 411648 20971519 10279936 8e Linux LVM
/dev/sda3 20971520 31457279 5242880 8e Linux LVM
命令(输入 m获取帮助):w #保存
Thepartition table has been altered!
Callingioctl() to re-read partition table.
WARNING:Re-reading the partition table failed with error 16:设备或资源忙.
Thekernel still uses the old table. The new table will be used at
the nextreboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
[root@Geeklp201~]# partprobe
注意:这一步操作中出现Warning,然而这并不我们后续的操作。
2、创建物理卷
[root@Geeklp201 ~]#pvcreate /dev/sda3
Physical volume "/dev/sda3"successfully created.
3、扩展卷组
[root@Geeklp201 ~]#vgextend centos /dev/sda3
Volume group "centos" successfullyextended
[root@Geeklp201 ~]#pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 9.80g 0
/dev/sda3 centos lvm2 a-- <5.00g<5.00g
名称为centos的卷组已经成功扩展
4、扩展逻辑卷。
从上图中大家可以看出来,我的当前系统一共存在2个逻辑卷,分别是root和swap。大家都知道,root一般是挂载在根目录(/)下面的,很多内容都存放在根目录(/)下面,非常重要。在不改变根目录结构的条件下扩展磁盘空间的操作也会经常遇到。
现在,我们需要把逻辑卷root的空间扩展到12GB(4MB的整数倍)。
[root@Geeklp201 ~]#lvextend -L 12GB /dev/centos/root
Size of logical volume centos/root changedfrom 8.80 GiB (2253 extents) to 12.00 GiB (3072 extents).
Logical volume centos/root successfullyresized.
注意:命令lvextend后只能跟逻辑卷路径,扩展的磁盘空间容量一定要比原来大。
同步文件系统。一般情况想,使用resize2fs命令来同步文件系统。但是,CentOS7的默认文件系统为xfs,resize2fs命令在此无效,如果文件系统是ext4的话,那么请用resize2fs来同步文件系统。
[root@Geeklp201 ~]#xfs_growfs /dev/centos/root
开心!大功告成!重启再观察一下!成功挂载!没有任何问题,非常棒!此法适用于VMware、KVM、Xen等虚拟化平台的Linux系统。
5、在步骤4中,我们看到还有一个逻辑卷swap呢!是不是可以通过扩展逻辑卷来扩展swap空间呢?让我们来试一下吧!
[root@Geeklp201 ~]#lvextend -L 2GB /dev/centos/swap
在操作之前最好把将缓冲区的数据写 入磁盘。
[root@Geeklp201 ~]#sync;sync
[root@Geeklp201 ~]# swapoff /dev/centos/swap #操作之前记得先将swap分区关闭
[root@Geeklp201 ~]#mkswap /dev/centos/swap
mkswap:/dev/centos/swap: warning: wiping old swap signature.
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=4250fdac-92c1-43f4-b266-c9d9c69a2783
[root@Geeklp201 ~]#swapon /dev/centos/swap
[root@Geeklp201 ~]#free -h
total used free shared buff/cache available
Mem: 472M 118M 215M 4.6M 138M 302M
Swap: 2.0G 0B 2.0G
从上面的截图中我们可以看到,原来我的swap空间只有1GB,经过扩展之后,我们的swap空间增加到2GB。瞎折腾成功!窃喜!是不是很简单快捷?
6、逻辑卷扩展成功,接下来我们探讨一下缩小逻辑卷。
[root@Geeklp201 ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 12.00g
swap centos -wi-ao---- 2.00g
系统存在2个逻辑卷,现在就来尝试一下缩小逻辑卷root吧!把逻辑卷从原来的12GB缩小到8GB。
[root@Geeklp201 /]#lvreduce -L 8GB /dev/centos/root
WARNING: Reducing active and open logicalvolume to 8.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really wantto reduce centos/root? [y/n]:
根据以上提示,缩小逻辑卷是可能使数据丢失的,后果很严重!不得不进行该操作的话,请先将此逻辑卷下的内容备份后再操作!我用我自己的实验环境测试了一下,缩小之后系统无法正常启动,用引导盘troubleshooting都不能成功把任何一个逻辑卷挂载成功,挂载分区除了引导分区其他别的分区均不成功,直接打不开原来的系统文件,束手无策,后果非常严重!对于挂载点为根目录(/)的分区的操作需要格外谨慎。那么是不是我们的探索至此结束了呢?生命在于折腾,让我们新建一个逻辑卷来继续吧!
[root@Geeklp201 /]#lvcreate -L 1GB -n test centos
查看一下新建的逻辑卷概要情况:
[root@Geeklp201 /]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 10.80g
swap centos -wi-ao---- 2.00g
test centos -wi-a----- 1.00g
逻辑卷test创建成功。由于centos7使用的文件系统默认情况下为xfs,将我们创建好的逻辑卷格式化为xfs来备用。
[root@Geeklp201 /]#mkfs.xfs /dev/centos/test
(在此说明一下,在对逻辑卷root进行缩小操作时,已经造成数据丢失,实验环境已经重建,在对逻辑卷root进行扩展是使用的命令为:lvextend -L +2GB /dev/centos/root)
暂时把逻辑卷test挂载到mnt下,创建2个文件,在进行逻辑卷缩小是观察该文件是否会有变化。
mount/dev/centos/test /mnt
[root@Geeklp201mnt]# date>test.txt
[root@Geeklp201mnt]# dd if=/dev/zero of=test.bak bs=1M count=128
卸载逻辑卷,进行一下修复操作。
[root@Geeklp201 mnt]# cd / #不要在当前挂载点来卸载该挂载点的设备,这会导致操作不成功
[root@Geeklp201 /]#umount /mnt
[root@Geeklp201 /]#xfs_repair /dev/centos/test
把逻辑卷test的容量缩小到512MB。
[root@Geeklp201 /]#lvreduce -L 512MB /dev/centos/test
WARNING: Reducing active logical volume to512.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really wantto reduce centos/test? [y/n]: y
Size of logical volume centos/test changedfrom 1.00 GiB (256 extents) to 512.00 MiB (128 extents).
Logical volume centos/test successfullyresized.
操作成功!但是在进行文件系统同步、重新挂载等操作的过程,出现问题,挂载不了!重新格式化一下!
重新格式化都出现问题!还必须强制格式化!随意进行缩小操作风险之大由此可见!我们之前创建的文件肯定是不存在了!格式化之后就能进行文件系统同步、挂载使用了。是不是我们在操作过程中哪里操作不对呢?
接下来,我们再次对逻辑卷test进行容量缩小操作,看一下是否能避免数据丢失这种风险!
[root@Geeklp201 /]#mount /dev/centos/test /mnt
[root@Geeklp201 /]#cd /mnt
[root@Geeklp201mnt]# date>test.txt
[root@Geeklp201mnt]# dd if=/dev/zero of=test.test bs=1MB count=128
[root@Geeklp201mnt]# lvresize -L 256MB /dev/centos/test
WARNING: Reducing active and open logicalvolume to 256.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really wantto reduce centos/test? [y/n]: y
Size of logical volume centos/test changedfrom 512.00 MiB (128 extents) to 256.00 MiB (64 extents).
Logical volume centos/test successfullyresized.
操作完成之后数据依然完美丢失!经过查阅一些资料,xfs文件系统并不支持容量缩小。非要进行缩小必须先进行数据备份,不然数据必然丢失。下面让我们来试一下ext4文件系统下的缩小操作。
[root@Geeklp201 /]#mkfs.ext4 /dev/centos/test
[root@Geeklp201 /]#mount /dev/centos/test /mnt
[root@Geeklp201mnt]# date>test.txt
[root@Geeklp201mnt]# dd if=/dev/zero of=test.test bs=1MB count=64
[root@Geeklp201mnt]# cd /
[root@Geeklp201 /]#umount /mnt/
[root@Geeklp201 /]#lvs
[root@Geeklp201 /]# lvreduce -L 128MB /dev/centos/test #在此步操作之前依然有数据丢失的风险提示,选择是
[root@Geeklp201 /]#e2fsck /dev/centos/test
e2fsck 1.42.9(28-Dec-2013)
文件系统的大小 (依据超级块)为 262144块
而设备的物理大小为 131072块
超级块或分区表可能已被损坏!
中断<y>?是
磁盘检查不能通过!resize2fs操作因此也不能进行咯。数据丢失,实验失败!
[root@Geeklp201 /]#mkfs.ext4 /dev/centos/test
[root@Geeklp201 /]#mount /dev/centos/test /mnt
[root@Geeklp201mnt]# date>test.txt
[root@Geeklp201mnt]# dd if=/dev/zero of=test.test bs=1MB count=64
[root@Geeklp201 /]#e2fsck -f /dev/centos/test
[root@Geeklp201 /]# resize2fs /dev/centos/test 80m #这里是m不是mb哦,注意一下
resize2fs 1.42.9(28-Dec-2013)
Resizing thefilesystem on /dev/centos/test to 81920 (1k) blocks.
The filesystem on/dev/centos/test is now 81920 blocks long.
[root@Geeklp201 /]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 10.80g
swap centos -wi-ao---- 2.00g
test centos -wi-a----- 128.00m
呵呵,逻辑卷test的容量到这一步依然没有变化哦!接下来进行逻辑卷test容量减少操作。
[root@Geeklp201 /]#lvreduce -L 80MB /dev/centos/test
WARNING: Reducing active logical volume to80.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really wantto reduce centos/test? [y/n]: y
Size of logical volume centos/test changedfrom 128.00 MiB (32 extents) to 80.00 MiB (20 extents).
Logical volume centos/test successfullyresized.
依然有风险提示,选择是。lvs看一下,已经缩小到80MB!
见证奇迹的时刻到来咯!挂载逻辑卷test,看一下之前的文件是否完美存在?
[root@Geeklp201 /]#mount /dev/centos/test /mnt/
[root@Geeklp201 /]#cd /mnt/
终于成功了,不容易!顺便站起来去倒杯水,喝点水继续探索!
7、逻辑卷的删除就简单咯!
[root@Geeklp201 /]#lvremove /dev/centos/test
Do you really wantto remove active logical volume centos/test? [y/n]: y
Logical volume "test" successfullyremoved
8、居于lvm创建的swap空间是否可以减小呢?让我们来试一下!
[root@Geeklp201/]# sync;sync
[root@Geeklp201 /]#swapoff /dev/centos/swap
[root@Geeklp201 /]#lvreduce -L 1GB /dev/centos/swap
WARNING: Reducing active logical volume to1.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really wantto reduce centos/swap? [y/n]: y
Size of logical volume centos/swap changedfrom 2.00 GiB (512 extents) to 1.00 GiB (256 extents).
Logical volume centos/swap successfullyresized.
[root@Geeklp201 /]#mkswap /dev/centos/swap
[root@Geeklp201 /]#swapon /dev/centos/swap
操作成功,重启之后没发现有异常!
(二)新增一块磁盘,使用lvm来管理磁盘空间
1、在不关机的情况下,我们在原设备上新增一块硬盘。我们将在此处实践创建卷组、移除卷组、物理卷、移除物理卷等操作!
2、新增成功,系统不识别新增的硬盘,必须重启,之后识别设备,创建物理卷。
[root@Geeklp201 ~]#pvcreate /dev/sdb
Physical volume "/dev/sdb"successfully created.
3、创建卷组geeklp-vg。
[root@Geeklp201~]# vgcreate geeklp-vg/dev/sdb
Volume group "geeklp-vg" successfully created
4、移除卷组之后再移除物理卷。
[root@Geeklp201~]# vgremove geeklp-vg
Volume group "geeklp-vg" successfully removed
[root@Geeklp201 ~]#pvremove /dev/sdb
Labels on physical volume"/dev/sdb" successfully wiped.
5、由于要接着实践,需重复第2、3步操作。顺序不能颠倒。创建容量为1GB的逻辑卷geeklp-lv,格式化为xfs格式,挂载使用。
[root@Geeklp201 /]#pvcreate /dev/sdb
Physical volume "/dev/sdb"successfully created.
[root@Geeklp201 /]#vgcreate geeklp-vg /dev/sdb
Volume group "geeklp-vg"successfully created
[root@Geeklp201 /]#lvcreate -L 1GB -n geeklp-lv geeklp-vg
Logical volume "geeklp-lv" created.
[root@Geeklp201 /]#mkfs.xfs /dev/geeklp-vg/geeklp-lv
[root@Geeklp201 /]#mount /dev/geeklp-vg/geeklp-lv /mnt/
[root@Geeklp201 /]#cd mnt/
[root@Geeklp201mnt]# date>test.txt
[root@Geeklp201mnt]# cat test.txt
2017年 11月 14日 星期二14:47:26 CST
[root@Geeklp201 /]#xfs_growfs /dev/geeklp-vg/geeklp-lv
6、扩展卷组geeklp-vg。
我们再加一块硬盘。
重启系统,创建物理卷/dev/sdc并将其用于扩展卷组geeklp-vg。
[root@Geeklp201mnt]# cd /
[root@Geeklp201 /]#umount /mnt
[root@Geeklp201 /]#pvcreate /dev/sdc
Physical volume "/dev/sdc"successfully created.
[root@Geeklp201 /]#vgextend geeklp-vg /dev/sdc
Volume group "geeklp-vg"successfully extended
7、扩展逻辑卷geeklp-lv,使其再增加1GB空间。
[root@Geeklp201 /]#lvextend -L +1GB /dev/geeklp-vg/geeklp-lv
Size of logical volume geeklp-vg/geeklp-lvchanged from 1.00 GiB (256 extents) to 2.00 GiB (512 extents).
Logical volume geeklp-vg/geeklp-lvsuccessfully resized.
[root@Geeklp201 /]#xfs_growfs /dev/geeklp-vg/geeklp-lv
成功扩展逻辑卷geeklp-lv。挂载了看一下,之前创建的文件完整存在,无数据丢失。
8、再次实践缩小逻辑卷geeklp-lv的空间,缩减到1.5GB。
[root@Geeklp201 /]#lvreduce -L -0.5GB /dev/geeklp-vg/geeklp-lv
WARNING: Reducing active logical volume to1.50 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really wantto reduce geeklp-vg/geeklp-lv? [y/n]: y
Size of logical volume geeklp-vg/geeklp-lvchanged from 2.00 GiB (512 extents) to 1.50 GiB (384 extents).
Logical volume geeklp-vg/geeklp-lvsuccessfully resized.
[root@Geeklp201 /]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 10.80g
swap centos -wi-ao---- 1.00g
geeklp-lv geeklp-vg -wi-a----- 1.50g
[root@Geeklp201 /]#mount /dev/geeklp-vg/geeklp-lv /mnt/
[root@Geeklp201 /]#cd /mnt/
[root@Geeklp201mnt]# ls
test.txt
[root@Geeklp201mnt]# cat test.txt
2017年 11月 14日 星期二14:47:26 CST
缩减成功,数据未丢失,不过这个操作还是有风险的,还是强烈建议备份后再进行操作。为了确保实验的可靠性,我对机器进行了重启,数据依然健在,很神奇!细心的小伙伴可能会发现,使用命令df -h查看我们已经挂载了的逻辑卷,空间并未发生变化,这是漏了使用xfs_growfs来执行逻辑卷的空间缩减操作!
[root@Geeklp201 /]#xfs_growfs /dev/geeklp-vg/geeklp-lv
9、细心的小伙伴可能也发现了,我在前面的操作过程中并未进行新建分区操作,直接对物理设备进行lvm管理了!后来我又把所有逻辑卷删除,先新建分区/dev/sdb1和/dev/sbc1,成功进行了物理机创建、卷组创建、逻辑卷创建、逻辑卷扩容、逻辑卷缩减空间及对应的删除操作,一切操作都很顺利,没有任何警告。在逻辑卷的扩容、缩减空间过程中均未发生数据丢失的意外情况。
10、对于新建的逻辑卷,如果需要开机自动挂载,请编辑fstab文件。例如:在启动时需要把逻辑卷geeklp-lv挂载到/mnt下:
echo"/dev/geeklp-vg/geeklp-lv /mnt xfs defaults 0 0">>/etc/fstab
四、逻辑卷快照
LVM逻辑卷管理器还具备有“快照卷”的功能,这项功能很类似于虚拟机软件的还原时间点功能。例如可以对某一个LV逻辑卷设备做一次快照,如果今后发现数据被改错了,咱们可以把之前做好的快照卷进行覆盖还原,LVM逻辑卷管理器的快照功能有两项特点,第一是快照卷的大小应该尽量等同于LV逻辑卷的容量,第二是快照功能仅一次有效,一旦被还原后则会被自动立即删除。
[root@Geeklp201 /]#lvcreate -L 512MB -s -n snap /dev/centos/geeklp-lv
Using default stripesize 64.00 KiB.
Logical volume "snap" created.
[root@Geeklp201 /]#mkfs.xfs -f /dev/centos/geeklp-lv
[root@Geeklp201 /]#xfs_growfs /dev/centos/geeklp-lv
[root@Geeklp201 /]#mount /dev/centos/geeklp-lv /mnt
[root@Geeklp201mnt]# dd if=/dev/zero of=test.test bs=1M count=256
逻辑卷snap也发生相应变化!
对逻辑卷geeklp-lv进行快照合并还原操作,在这之前记得先卸载掉逻辑卷设备与目录的挂载。
[root@Geeklp201mnt]# cd /
[root@Geeklp201 /]#umount /mnt/
[root@Geeklp201 /]# lvconvert --merge /dev/centos/snap #注意此处是快照卷的路径
Merging of volume centos/snap started.
geeklp-lv: Merged: 51.37%
geeklp-lv: Merged: 100.00%
恢复完成之后,快照卷立马被删除。可以通过lvs命令查看。不过很很不幸的是,在快照恢复后,逻辑卷/dev/centos/geeklp-lv数据丢失了!看来这样操作并不靠谱啊!
我之后又在由新增磁盘组成的卷组里创建物理卷,发现在快照卷创建之前磁盘上的数据才能被还原,快照卷创建之后的数据是不会被还原的。
对于LVM的折腾到此结束,若有不妥之处敬请指教。
五、总结归纳
1、在原硬盘上追加磁盘空间进行逻辑卷管理必须先新建分区再进行LVM相关的操作。对挂载点为根目录(/)的逻辑卷空间缩减操作需要格外谨慎,数据丢失的风险极高,使用原系统盘引导系统之后都不能对丢失数据进行任何操作,不建议对该逻辑卷进行空间缩减操作。在对逻辑卷进行操作之后需要执行xfs_growfs(xsf文件系统)或resize2fs(ext4文件系统)才会生效,不然使用df -h查看时磁盘空间并未发生变化。
2、通过新增磁盘要实现扩容要优于在原磁盘上追加空间。
3、如果不是特殊情况,新增的磁盘最好另外新建一个卷组,把新增的磁盘都放到新的卷组内,按需分配给逻辑卷使用。
4、可以不对新增磁盘新建分区直接创建物理卷,这种操作与新增磁盘新建分区后创建物理卷并无差异。
5、一般情况下,其他逻辑卷与挂载点为根目录的逻辑卷在同一个卷组,对文件系统为xfs进行空间缩减时会造成数据丢失,ext4文件系统则不会造成数据丢失。因为缩减空间之后系统不识别原来的xfs文件系统,无法挂载使用,需要重新格式化之后才能使用。
6、在新增磁盘创建的逻辑卷上进行空间缩减操作,目前没有发送数据丢失的情形,还需在后续的使用过程中归纳总结其中的原因。
7、居于LVM创建的swap空间是可以进行增加或者缩小的,在操作之前需要注意使用命令sync将数据强制写入磁盘。
8、逻辑卷是可以直接删除的,删除物理卷之前必须先删除卷组。这个顺序不能搞错。
9、根目录所挂载卷组内逻辑卷不支持快照还原。在快照卷创建之前磁盘上的数据才能被还原,快照卷创建之后的数据是不会被还原的。