在企业里面,很多时候,我们也无法估量应用程序对磁盘空间的使用量,如果我们使用用传统的文件系统,磁盘分区一旦确定下来以后,就再也无法更改使用空间了,如果需要更改就必须让应用程序离线后,对原有分区的数据进行备份,然后再对磁盘进行重新分区格式,重新复制原来的数据放回新的磁盘分区上,由此带来的麻烦是不言而喻的,如果是可以离线的业务,到也好说,如果是不允许离线的业务,那就影响更大。所以一代全新的文件系统LVM的问世,打破了这一技术瓶颈。它允许用户使用容量不不统一的硬盘和分区组合在一起,构成一个逻辑空间,用户可以在这个逻辑空间上划分自己想要的逻辑卷空间,并且可以随时扩展或者缩减已经划分好的逻辑卷大小,更可观的是扩展操作还可以在线进行。
一、LVM的概念
LVM:Logical Volume Manager(逻辑卷管理器)
允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小
允许在多个物理设备间重新组织文件系统
将设备指定为物理卷,用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的,在物理卷上创建的逻辑卷是由物理区域(PE)组成,可以在逻辑卷上创建文件系统
逻辑卷的层次
上层:逻辑卷:LV——logical volume(表示单位是LE——logical extend:默认单位4M)
中层:卷组:VG——volume group
底层:物理卷:PV——physical volume(表示单位PE——physical extend:默认单位4M)
二、PV管理命令
pvcreate:创建pv pvcreate /dev/sda{14,15}
pvremove:删除pv pvremove /dev/sda{14,15}
pvscan:扫描当前系统上的所有pv
pvdisplay:查看pv的详细属性 pvdisplay [/dev/sda15]省略即查看全部
pvmove:移动pv上的所有数据到其它pv pvmove /dev/sda15
pvs:简单查看pv属性
三、VG管理命令
vgcreate:创建vg vgcreate vg_name /path/to/pv -s #G
vgremove:删除vg vgremove vg_name
vgextend:扩展vg vgextend vg_name /dev/sda#
vgreduce:缩减vg vgreduce vg_name /dev/sda#
vgscan:扫描当前系统上的所有vg
vgdisplay:查看vg的详细属性
vgs:简单查看vg属性
四、LV管理命令
lvcreate:创建lv lvcreate -n lv_name -L #G vg_name
lvremove:删除lv lvremove /dev/vg_name/lv_name
lvextend:扩展lv
lvreduce:缩减lv
lvscan:扫描当前系统上的所有lv
lvdiskplay:查看lv的详细属性 lvdisplay /dev/vg_name/lv_name
lvs:简单查看lv属性
五、扩展逻辑卷
1、扩展物理边界
lvextend -L #G /dev/vg_name/lv_name 将当前lv扩展到#G
lvextend -L +#G /dev/vg_name/lv_name 在当前lv上再扩展#G
2:扩展逻辑边界
resize2fs /dev/vg_name/lv_name # 在当前lv的基础上再扩展#G
resize2fs -p /dev/vg_name/lv_name 物理边界有多大,就扩展到多大
两条命令可以合并:lvextend -r -l +#%FREE /dev/vg_name/lv_name
六、缩减逻辑卷
1、确保缩减后的空间大小能存储原有的所有数据,有条件的情况下最好先备份准备缩减的逻辑卷上的数据
2,取消逻辑卷的挂载状态(不能在线缩减逻辑卷)
umount /dev/vg_name/lv_name
3,进行缩减之前应先强行检查文件系统的,确保文件系统处于一致性状态
e2fsck -f /dev/vg_name/lv_name
4、缩减逻辑边界
resize2fs /dev/vg_name/lv_name #G
5、缩减物理边界
lvreduce -L # /dev/vg_name/lv_name 将当前lv缩减到#G
lvreduce -L -# /dev/vg_name/lv_name 在当前lv上缩减#G
七、逻辑卷创建实例
第一步:在服务器上装载4块20G的硬盘,查看系统上是否已经识别
[[email protected] test]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 5G 0 part /
└─sda3 8:3 0 5G 0 part /test
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sde 8:64 0 20G 0 disk
sr0 11:0 1 7.2G 0 rom
[[email protected] test]#
成功识别,可以开始创建pv
第二步:开始创建pv,将四块硬盘全部创建成pv,以备待用
[[email protected] test]# pvcreate /dev/sd{b,c,d,e}
Physical volume "/dev/sdb" successfully created
Physical volume "/dev/sdc" successfully created
Physical volume "/dev/sdd" successfully created
Physical volume "/dev/sde" successfully created
[[email protected] test]#
pv创建成功,可以使用pvscan扫描所有pv,pvdisplay查看pv的详细属性
[[email protected] test]# pvscan
PV /dev/sdd lvm2 [20.00 GiB]
PV /dev/sdb lvm2 [20.00 GiB]
PV /dev/sde lvm2 [20.00 GiB]
PV /dev/sdc lvm2 [20.00 GiB]
Total: 4 [80.00 GiB] / in use: 0 [0 ] / in no VG: 4 [80.00 GiB]
[[email protected] test]# pvdisplay /dev/sdb
"/dev/sdb" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 6S63C2-MAKa-4Rho-fd6q-oP0a-hg6o-xKI1Oa
[[email protected] test]#
第三步:开始创建vg,vg命名为myvg
[[email protected] test]# vgcreate myvg /dev/sd{b,c,d}
Volume group "myvg" successfully created
[[email protected] test]#
vg创建成功,可以使用vgscan扫描所有vg,vgdisplay查看vg的详细属性
[[email protected] test]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "myvg" using metadata type lvm2
[[email protected] test]# vgdisplay /dev/myvg
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 59.99 GiB
PE Size 4.00 MiB
Total PE 15357
Alloc PE / Size 0 / 0
Free PE / Size 15357 / 59.99 GiB
VG UUID Fb6PT7-YAQa-JaKR-KWNO-EHh8-OBHC-56OA0s
[[email protected] test]#
第四步:开始创建lv,lv命名为mylv
[[email protected] test]# lvcreate -n mylv -L 40G myvg
Logical volume "mylv" created.
[[email protected] test]#
lv创建成功,可以使用lvscan扫描所有lv,lvdisplay查看lv详细属性
[[email protected] test]# lvscan
ACTIVE ‘/dev/myvg/mylv‘ [40.00 GiB] inherit
[[email protected] test]# lvdisplay /dev/myvg/mylv
--- Logical volume ---
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID GjUPmx-ww2H-RwIf-2up9-nnen-mRs2-IwC5Z6
LV Write Access read/write
LV Creation host, time centos7, 2016-08-29 22:30:04 +0800
LV Status available
# open 0
LV Size 40.00 GiB
Current LE 10240
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
[[email protected] test]#
第五步:格式化lv,使用ext4系统,指定卷标为mylv
[[email protected] test]# mkfs.ext4 -L mylv /dev/myvg/mylv
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=mylv
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
2621440 inodes, 10485760 blocks
524288 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2157969408
320 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, 1605632, 2654208,
4096000, 7962624
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[[email protected] test]#
lv的文件系统已经建立,可以挂载使用了
第六步:挂载lv,创建/mylv做为挂载点,并验证结果
[[email protected] test]# mkdir /mylv
[[email protected] test]# mount /dev/myvg/mylv /mylv
[[email protected] test]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 5.0G 4.3G 744M 86% /
devtmpfs 899M 0 899M 0% /dev
tmpfs 913M 84K 913M 1% /dev/shm
tmpfs 913M 8.9M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda3 4.8G 1.2G 3.4G 26% /test
/dev/sda1 197M 139M 59M 71% /boot
tmpfs 183M 16K 183M 1% /run/user/42
tmpfs 183M 0 183M 0% /run/user/0
/dev/mapper/myvg-mylv 40G 49M 38G 1% /mylv
[[email protected] test]# ll /mylv
total 16
drwx------. 2 root root 16384 Aug 29 22:39 lost+found
[[email protected] test]#
第七步:为lv配置自动挂载,使用lv的UUID写入fstab自动挂载文件,方便长期使用
[[email protected] test]# blkid /dev/myvg/mylv
/dev/myvg/mylv: LABEL="mylv" UUID="184a8620-2b45-4f2e-ba6e-4951178ca261" TYPE="ext4"
[[email protected] test]# vim /etc/fstab
UUID="184a8620-2b45-4f2e-ba6e-4951178ca261" /mylv ext4 defaults 0 0
八、逻辑卷扩展实例
第一步:扩展物理边界:lvextend -L [+] # /dev/myvg/mylv
查看当前lv物理边界
[[email protected] ~]# lvs /dev/myvg/mylv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 40.00g
[[email protected] ~]#
查看当前vg的物理边界
[[email protected] ~]# vgs /dev/myvg
VG #PV #LV #SN Attr VSize VFree
myvg 3 1 0 wz--n- 59.99g 19.99g
[[email protected] ~]#
接下来可以正式开始扩展物理边界了
[[email protected] ~]# lvextend -L +19.99G /dev/myvg/mylv
Rounding size to boundary between physical extents: 19.99 GiB
Insufficient free space: 5118 extents needed, but only 5117 available
[[email protected] ~]#
当前lv大小40G,vg大小59.99G,为什么我扩展19.99G,还报错了,原因很简单,le的尺寸是4M,我们指定的空间不一定是le的整数倍,也就有些误差,所以我们指定扩展容量的时候要比实际剩余值小一些才行,或者我们使用百分比模式去指定扩展空间就回避这个问题了。
[[email protected] ~]# lvextend -L +19.98G /dev/myvg/mylv
Rounding size to boundary between physical extents: 19.98 GiB
Size of logical volume myvg/mylv changed from 40.00 GiB (10240 extents) to 59.98 GiB (15355 extents).
Logical volume mylv successfully resized.
物理边界扩展成功,可以开始扩展逻辑边界了
第二步:扩展逻辑边界:resize2fs -p /dev/myvg/mylv
[[email protected] ~]# resize2fs -p /dev/myvg/mylv
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv is mounted on /mylv; on-line resizing required
old_desc_blocks = 5, new_desc_blocks = 8
The filesystem on /dev/myvg/mylv is now 15723520 blocks long.
[[email protected] ~]# lvs /dev/myvg/mylv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-ao---- 59.98g
[[email protected] ~]#
mylv成功的从40G扩展到了60G
这是属于在vg还有空间的情况下去扩展lv,如果现在vg被lv全部占用完了,还想扩展lv的话,就必须首先扩展vg的物理边界,也就是说添加pv了,添加pv的前提是要添加硬盘或者分区了。在这里,我之前还有已经创建好的pv没用,所以我就略过此步,直接开始扩展vg了
第一步:扩展vg vgextend myvg /dev/sd#
[[email protected] ~]# vgextend /dev/myvg /dev/sde
Volume group "myvg" successfully extended
[[email protected] ~]#
[[email protected] ~]# vgs /dev/myvg
VG #PV #LV #SN Attr VSize VFree
myvg 4 1 0 wz--n- 79.98g 19.98g
[[email protected] ~]#
myvg成功的从60G扩展到了80G
第二步:扩展物理边界和扩展逻辑边界可以一步到位(这次我们使用百分比表示准备扩展的空间) lvextend -r -l +#%FREE /dev/myvg/mylv
[[email protected] ~]# lvextend -r -l +100%FREE /dev/myvg/mylv
Size of logical volume myvg/mylv changed from 59.99 GiB (15357 extents) to 79.98 GiB (20476 extents).
Logical volume mylv successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/myvg-mylv is mounted on /mylv; on-line resizing required
old_desc_blocks = 8, new_desc_blocks = 10
The filesystem on /dev/mapper/myvg-mylv is now 20967424 blocks long.
[[email protected] ~]# lvs /dev/myvg/mylv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-ao---- 79.98g
[[email protected] ~]#
mylv成功的从60G扩展到了80G
九、逻辑卷缩减实例
如果我们vg空间分配的太大了,想把多余的空间回收一部分,这就涉及到了逻辑卷的缩减问题了,缩减逻辑卷和扩展逻辑卷虽然是一个逆向操作,但它们之间存在一定的区别,扩展逻辑卷可以在线操作,但缩减逻辑卷是不能在线操作的,而且扩展逻辑卷没什么风险,缩减逻辑卷相对来说有一定的风险,在有条件的情况下,建议先备份数据后再执行缩减操作。
第一步:取消逻辑卷的挂载状态 umont /dev/myvg/mylv
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 5.0G 4.3G 743M 86% /
devtmpfs 899M 0 899M 0% /dev
tmpfs 913M 84K 913M 1% /dev/shm
tmpfs 913M 8.9M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda3 4.8G 1.2G 3.4G 26% /test
/dev/sda1 197M 139M 59M 71% /boot
tmpfs 183M 16K 183M 1% /run/user/42
tmpfs 183M 0 183M 0% /run/user/0
/dev/mapper/myvg-mylv 79G 56M 76G 1% /mylv
[[email protected] ~]# umount /dev/myvg/mylv
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 5.0G 4.3G 743M 86% /
devtmpfs 899M 0 899M 0% /dev
tmpfs 913M 84K 913M 1% /dev/shm
tmpfs 913M 8.9M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda3 4.8G 1.2G 3.4G 26% /test
/dev/sda1 197M 139M 59M 71% /boot
tmpfs 183M 16K 183M 1% /run/user/42
tmpfs 183M 0 183M 0% /run/user/0
[[email protected] ~]#
第二步:强行检查lv的文件系统 e2fsck -f /dev/myvg/mylv
[[email protected] ~]# e2fsck -f /dev/myvg/mylv
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
mylv: 11/5242880 files (0.0% non-contiguous), 376154/20967424 blocks
[[email protected] ~]#
第三步:缩减lv的逻辑边界
[[email protected] ~]# resize2fs /dev/myvg/mylv 60G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 15728640 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 15728640 blocks long.
[[email protected] ~]#
第四步:缩减lv的物理边界
[[email protected] ~]# lvreduce -L 60G /dev/myvg/mylv
WARNING: Reducing active logical volume to 60.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 79.98 GiB (20476 extents) to 60.00 GiB (15360 extents).
Logical volume mylv successfully resized.
[[email protected] ~]# lvs /dev/myvg/mylv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 60.00g
[[email protected] ~]#
mylv成功的从80G缩减到了60G
十、逻辑卷快照
很多时候,我们对逻辑卷上的数据做了修改之后,我们还想再次返回原来的状态,那么这个时候逻辑卷快照就派上用场了,这个逻辑卷快照它只会在我们给逻辑卷做快照的那一瞬间,把逻辑卷上原有的所有的数据状态做一个记录下来,并不是完全的复制一个副本,只是在逻辑卷的原有数据发生改变时,才会把快照那一瞬间的原文件复制一个副本保存到快照卷上。当我们需要恢复快照时,可以直接用快照上的文件去替换逻辑卷上被修改过的文件,没有被修改过的文件是不需要做任何操作。由此以来,快照卷的空间大小设定是需要视快照卷使用过程中的数据的修改量决定的。
(一)建立快照:lvcreate -s -n mylv_snap -L 10G -p r /dev/myvg/mylv
1、我们复制一些文件到逻辑卷,并给逻辑卷建立一个快照
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 5.0G 4.3G 743M 86% /
devtmpfs 899M 0 899M 0% /dev
tmpfs 913M 84K 913M 1% /dev/shm
tmpfs 913M 8.9M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda3 4.8G 1.2G 3.4G 26% /test
/dev/sda1 197M 139M 59M 71% /boot
tmpfs 183M 16K 183M 1% /run/user/42
tmpfs 183M 0 183M 0% /run/user/0
/dev/mapper/myvg-mylv 59G 52M 57G 1% /mylv
[[email protected] ~]# cp /etc/fstab /mylv
[[email protected] ~]# cp /etc/fstab /mylv/a
[[email protected] ~]# cp /etc/fstab /mylv/b
[[email protected] ~]# ll /mylv
total 28
-rw-r--r--. 1 root root 444 Aug 30 21:55 a
-rw-r--r--. 1 root root 444 Aug 30 21:55 b
-rw-r--r--. 1 root root 444 Aug 30 21:55 fstab
drwx------. 2 root root 16384 Aug 29 22:39 lost+found
[[email protected] ~]# lvcreate -s -n mylv_snap -L 10G -p r /dev/myvg/mylv
Logical volume "mylv_snap" created.
[[email protected] ~]#
成功建立快照,接下来我们去查看一下快照卷上的内容
2、创建一个/snap做为挂载点,并把快照卷挂载上来看看里面的文件状态
[[email protected] ~]# mkdir /snap
[[email protected] ~]# mount /dev/myvg/mylv_snap /snap
mount: /dev/mapper/myvg-mylv_snap is write-protected, mounting read-only
[[email protected] ~]# ll /snap
total 28
-rw-r--r--. 1 root root 444 Aug 30 21:55 a
-rw-r--r--. 1 root root 444 Aug 30 21:55 b
-rw-r--r--. 1 root root 444 Aug 30 21:55 fstab
drwx------. 2 root root 16384 Aug 29 22:39 lost+found
[[email protected] ~]#
现在我们所看到的快照卷上的文件实际上是逻辑卷上文件的一个链接,并不是保存原有逻辑卷上文件的副本,这一点对于刚刚接触逻辑卷快照的同学来说是很难理解的,但其工作原理确实如此。接下来我们修改一下原逻辑卷上的文件,看看快照卷会不会有变化。
3、验证快照卷是否能保留住建立快照那一瞬间的状态
[[email protected] ~]# echo "hello world" >> /mylv/a
[[email protected] ~]# echo "hello world" > /mylv/b
[[email protected] ~]# rm -f /mylv/fstab
[[email protected] ~]# ll /mylv
total 24
-rw-r--r--. 1 root root 456 Aug 30 22:09 a
-rw-r--r--. 1 root root 12 Aug 30 22:10 b
drwx------. 2 root root 16384 Aug 29 22:39 lost+found
[[email protected] ~]# ll /snap
total 28
-rw-r--r--. 1 root root 444 Aug 30 21:55 a
-rw-r--r--. 1 root root 444 Aug 30 21:55 b
-rw-r--r--. 1 root root 444 Aug 30 21:55 fstab
drwx------. 2 root root 16384 Aug 29 22:39 lost+found
[[email protected] ~]#
对比着来看,快照卷上的数据始终停留在拍摄快照的那一瞬间,不管你后面在原逻辑卷上创建、追加、删除多少数据,它是始终如一的。
(二)还原快照
1、首先我们把快照卷上的所有文件打包成了一个压缩文件
[[email protected] ~]# mkdir /tmp/mylvbak
[[email protected] snap]# tar -zcf /tmp/mylvbak/mylv.tar.gz *
[[email protected] snap]# ll /tmp/mylvbak
total 4
-rw-r--r--. 1 root root 488 Aug 30 22:48 mylv.tar.gz
[[email protected] snap]#
打包成功,准备还原
2、卸载快照卷,删除快照卷,解包压缩文件,直接把解包出来的文件移动并覆盖原逻辑卷上的数据也就完成了还原快照的操作
[[email protected] ~]# umount /dev/myvg/mylv_snap
[[email protected] ~]# lvremove /dev/myvg/mylv_snap
Do you really want to remove active logical volume mylv_snap? [y/n]: y
Logical volume "mylv_snap" successfully removed
[[email protected] mylvbak]# tar -xf mylv.tar.gz
[[email protected] mylvbak]# ll
total 16
-rw-r--r--. 1 root root 444 Aug 30 21:55 a
-rw-r--r--. 1 root root 444 Aug 30 21:55 b
-rw-r--r--. 1 root root 444 Aug 30 21:55 fstab
drwx------. 2 root root 6 Aug 29 22:39 lost+found
-rw-r--r--. 1 root root 488 Aug 30 22:48 mylv.tar.gz
[[email protected] mylvbak]#
这一步的操作演示只是为了给大家展示一些原理性的东西,还原快照的操作非常简单,当我们需要还原快照的时候,去建立一个挂载点把快照卷临时挂载上来,复制快照上的数据去覆盖原逻辑卷上的数据即可。当前你在创建快照以后,在原逻辑卷上新建的和创建快照那一瞬间无关的数据,还原快照时是不会有任何更改的。
十一、删除pv
第一种情况:vg上还有剩余空间,并且剩余空间大于我们准备回收的PV的空间,此时我们可以直接使用pvmove把准备回收的pv上的已有数据移动到其它pv上,然后使用pvreomve直接删除pv即可
环境展示
[[email protected] ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 50.00g
[[email protected] ~]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 4 1 0 wz--n- 79.98g 29.98g
[[email protected] ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb myvg lvm2 a-- 20.00g 0
/dev/sdc myvg lvm2 a-- 20.00g 0
/dev/sdd myvg lvm2 a-- 20.00g 9.99g
/dev/sde myvg lvm2 a-- 20.00g 20.00g
[[email protected] ~]#
接下来我们可以移动pv上的数据,回收sdb硬盘
第一步:移动sdb这个pv上的数据
[[email protected] ~]# pvmove /dev/sdb
/dev/sdb: Moved: 0.1%
/dev/sdb: Moved: 21.5%
/dev/sdb: Moved: 46.6%
/dev/sdb: Moved: 71.8%
/dev/sdb: Moved: 97.0%
/dev/sdb: Moved: 100.0%
[[email protected] ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb myvg lvm2 a-- 20.00g 20.00g
/dev/sdc myvg lvm2 a-- 20.00g 0
/dev/sdd myvg lvm2 a-- 20.00g 9.99g
/dev/sde myvg lvm2 a-- 20.00g 0
[[email protected] ~]#
认真观察一下的朋友都能发现,其实,在我刚才展示的环境下,完全没有必要再移动sdb上的数据了,因为从环境展示的图中可以看出,sde是完全空闲状态的,所以我们选择sdb就可以完全省掉移动数据这个步骤了,这里纯粹是为了给大家展示所有pv上都存放有数据的情况
第二步:从vg中移除sdb这个pv
[[email protected] ~]# vgreduce /dev/myvg /dev/sdb
Removed "/dev/sdb" from volume group "myvg"
[[email protected] ~]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 3 1 0 wz--n- 59.99g 9.99g
[[email protected] ~]#
已经成功的从vg中的移除sdb这个pv了,现在可以直接删除sdb这个pv了
第三步:删除sdb这个pv
[[email protected] ~]# pvremove /dev/sdb
Labels on physical volume "/dev/sdb" successfully wiped
[[email protected] ~]#
验证一下结果
[[email protected] ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc myvg lvm2 a-- 20.00g 0
/dev/sdd myvg lvm2 a-- 20.00g 9.99g
/dev/sde myvg lvm2 a-- 20.00g 0
[[email protected] ~]#
现在我们完全可以从服务器上直接拆除sdb这块物理硬盘了,sdb这块硬盘可以用用它处了。
第二种情况:如果vg上没有剩余空间,但是lv上的剩余空间大于我们准备回收的pv的空间,此时我们需要先缩减lv,把准备回收的pv的空间压缩回来,然后再执行第一种情况的操作,只有这样才能把多余的空间彻底释放出来用做它处。
环境展示
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 5.0G 4.3G 743M 86% /
devtmpfs 899M 0 899M 0% /dev
tmpfs 913M 84K 913M 1% /dev/shm
tmpfs 913M 8.9M 904M 1% /run
tmpfs 913M 0 913M 0% /sys/fs/cgroup
/dev/sda3 4.8G 1.2G 3.4G 26% /test
/dev/sda1 197M 139M 59M 71% /boot
tmpfs 183M 16K 183M 1% /run/user/42
tmpfs 183M 0 183M 0% /run/user/0
/dev/mapper/myvg-mylv 50G 52M 47G 1% /mylv
[[email protected] ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-ao---- 50.00g
[[email protected] ~]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 3 1 0 wz--n- 59.99g 9.99g
[[email protected] ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc myvg lvm2 a-- 20.00g 0
/dev/sdd myvg lvm2 a-- 20.00g 9.99g
/dev/sde myvg lvm2 a-- 20.00g 0
[[email protected] ~]#
仔细观察一下,可以发现我们同样可以从当前卷组中移除一个20G的pv,只不过这一次我们的步骤就比上一种情况要多一个lv缩减的过程了,因为当前的vg都处于使用中(也就是所有的pv都处于使用中)
第一步:将lv从50G缩减到35G
[[email protected] ~]# umount /dev/myvg/mylv
[[email protected] ~]# e2fsck -f /dev/myvg/mylv
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
mylv: 13/3276800 files (0.0% non-contiguous), 251766/13107200 blocks
[[email protected] ~]# resize2fs /dev/myvg/mylv 35G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 9175040 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 9175040 blocks long.
[[email protected] ~]# lvreduce -L 35G /dev/myvg/mylv
WARNING: Reducing active logical volume to 35.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 50.00 GiB (12800 extents) to 35.00 GiB (8960 extents).
Logical volume mylv successfully resized.
[[email protected] ~]# lvs /dev/myvg/mylv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 35.00g
[[email protected] ~]# vgs
VG #PV #LV #SN Attr VSize VFree
myvg 3 1 0 wz--n- 59.99g 24.99g
[[email protected] ~]#
lv成功的从50G缩减到了35G,现在vg上也就剩余了足够我们回收的空间了,与此同时也就形成了第一种情况的环境,接下来重复一下第一种情况的操作步骤即可
第二步:从vg中移除pv,再删除pv,实现最终目录
[[email protected] ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc myvg lvm2 a-- 20.00g 4.99g
/dev/sdd myvg lvm2 a-- 20.00g 20.00g
/dev/sde myvg lvm2 a-- 20.00g 0
[[email protected] ~]# vgreduce /dev/myvg /dev/sdd
Removed "/dev/sdd" from volume group "myvg"
[[email protected] ~]# pvremove /dev/sdd
Labels on physical volume "/dev/sdd" successfully wiped
[[email protected] ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdc myvg lvm2 a-- 20.00g 4.99g
/dev/sde myvg lvm2 a-- 20.00g 0
[[email protected] ~]#
因为这次我直接选择了空间处于完全空闲状态的pv,所以在从vg中移除pv之后,不用移动pv上的数据,就可以直接删除pv了
关于逻辑卷的操作也就分享这么多,大家对着教程多做几次实验基本掌握应该没问题。重点在于如何扩展和缩减逻辑卷,尤其是缩减的过种中涉及到步骤比较多,操作的先后顺序必须清析,才能成功实现。当然是实际生产环境中,缩减的情况比较少,大多都是空间不够了扩展的比较多。