一 简介
LVM是 Logical Volume Manager(逻辑卷管理)的简写。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性
与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用和用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如”sales’、 ‘development’)代替物理磁盘名(如’sda’、’sdb’)来标识存储卷
几个基本概念:PV:物理卷,相当于物理的磁盘分区
VG:卷组,LVM卷组类似于非LVM系统中的物理硬盘,由一个或多个物理卷组成。PV必须加入VG,可以将VG理解为一个仓库或者几个大的硬盘
LV:从VG中划分的逻辑分区
二 创建LVM分区
(1)创建主分区并修改分区类型:
Shell
[root@bogon ~]# fdisk /dev/xvdb
1[root@bogon~]# fdisk /dev/xvdb
Command (m for help): n ##创建新分区
Command action
e extended
p primary partition (1-4)
p ##分区类型为主分区
Partition number (1-4): 1##设置分区号
First cylinder (1-26108, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-26108, default 26108):
Using default value 26108
Command (m for help): p
Disk /dev/xvdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x52ba9efb
Device Boot Start End Blocks Id System
/dev/xvdb1 1 26108 209712478+ 83 Linux
Command (m for help): t ##修改分区格式
Selected partition 1##只有一块主分区
Hex code (type L to list codes): 8e ##类型改成LVM
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/xvdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x52ba9efb
Device Boot Start End Blocks Id System
/dev/xvdb1 1 26108 209712478+ 8e Linux LVM
Command (m for help): w ##保存退出
The partition table has been altered!
(2)创建物理卷PV:
使用上面新创建的分区 /dev/xvdb1 创建物理卷:
Shell
[root@bogon ~]# pvcreate /dev/xvdb1
1[root@bogon~]# pvcreate /dev/xvdb1
Physical volume “/dev/xvdb1” successfully created
查看已经存在的PV:
Shell
[root@bogon ~]# pvs
1[root@bogon~]# pvs
PV VG Fmt Attr PSize PFree
/dev/xvda2 VolGroup lvm2 a–u 49.51g 0
/dev/xvdb1 lvm2 —- 200.00g 200.00g
或者使用以下命令查看详细信息:
Shell
[root@bogon ~]# pvdisplay
1[root@bogon~]# pvdisplay
(3)创建卷组VG:
Shell
[root@bogon ~]# vgcreate vg_server1 /dev/xvdb1
1[root@bogon~]# vgcreate vg_server1 /dev/xvdb1
Volume group “vg_server1” successfully created
如果想要将多个物理卷添加到卷组,可以使用以下命令:
Shell
[root@bogon ~]# vgcreate vg_server2 /dev/xvdb2 /dev/xvdb3
1[root@bogon~]# vgcreate vg_server2 /dev/xvdb2 /dev/xvdb3
含义:创建卷组“vg_server2”,并且将物理卷“ /dev/xvdb2”、“ /dev/xvdb3”添加到卷组中
查看已经存在的VG:
Shell
[root@bogon ~]# vgs
1[root@bogon~]# vgs
VG #PV #LV #SN Attr VSize VFree
VolGroup 1 2 0 wz–n- 49.51g 0
vg_server1 1 0 0 wz–n- 200.00g 200.00g
或者使用以下命令查看详细信息:
Shell
[root@bogon ~]# vgdisplay
1[root@bogon~]# vgdisplay
(4)创建逻辑卷LV:
Shell
[root@bogon ~]# lvcreate -L 50G -n home vg_server1
1[root@bogon~]# lvcreate -L 50G -n home vg_server1
Logical volume “home” created.
参数含义:-L:指定分区大小
-n:指定逻辑卷名称,同时需要指定这个逻辑卷所属的卷组,这里就是“vg_server1”
显示已经存在的LV:
Shell
[root@bogon ~]# lvs
1[root@bogon~]# lvs
或者使用以下命令查看详细信息:
Shell
[root@bogon ~]# lvdisplay
1[root@bogon~]# lvdisplay
— Logical volume —
LV Path /dev/vg_server1/home
LV Name home
VG Name vg_server1
LV UUID Br0nXE-P5LX-w6dZ-BuzF-Km35-J8TF-mkp8mO
LV Write Access read/write
LV Creation host, time bogon, 2017-12-27 18:55:14 +0800
LV Status available
# open 0
LV Size 50.00 GiB
Current LE 12800
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:2
…
(5)格式化新创建的逻辑分区:
Shell
[root@bogon ~]# mkfs.ext4 /dev/vg_server1/home
1[root@bogon~]# mkfs.ext4 /dev/vg_server1/home
注:这里使用ext3格式格式化也可以
(6)挂载新分区到/home目录:
Shell
[root@bogon ~]# mount /dev/vg_server1/home /home
1[root@bogon~]# mount /dev/vg_server1/home /home
注:通过 fdisk -l 命令可以发现上面创建的新分区也可以是下面这个路径:
因此使用以下命令挂载也可以:
Shell
[root@bogon ~]# mount /dev/mapper/vg_server1-home /home
1[root@bogon~]# mount /dev/mapper/vg_server1-home /home
查看挂载情况:
Shell
[root@bogon ~]# df -lh
1[root@bogon~]# df -lh
(7)写入开机自动挂载:
Shell
[root@bogon ~]# vim /etc/fstab
1[root@bogon~]# vim /etc/fstab
在最后一行添加:
/dev/mapper/vg_server1-home /home ext4 defaults 0 0
1/dev/mapper/vg_server1-home/homeext4defaults00
意思很简单,就是开机自动将/dev/mapper/vg_server1-home分区挂载到/home路径
(8)测试:
i)先取消上面的分区挂载:
Shell
[root@bogon ~]# umount /home
1[root@bogon~]# umount /home
ii)挂载/etc/fstab 中定义的所有配置:
Shell
[root@bogon ~]# mount -a
1[root@bogon~]# mount -a
iii)再次查看挂载情况:
Shell
[root@bogon ~]# df -lh
1[root@bogon~]# df -lh
如果出现以下信息,则说明/etc/fstab文件已经配置正确了
三 LVM分区基本管理
(1)使用lvextend命令增加LVM逻辑分区容量:
lvextend命令:在线扩展逻辑卷的空间大小,而不中断应用程序对逻辑卷的访问
主要参数:-L:指定逻辑卷的大小,单位为“kKmMgGtT”
-l:指定逻辑卷的大小(LE数)
i)增加10G容量:
Shell
[root@bogon ~]# lvextend -L +10G /dev/vg_server1/home
1[root@bogon~]# lvextend -L +10G /dev/vg_server1/home
ii)扩展到70G容量:
Shell
[root@bogon ~]# lvextend -L 70G /dev/vg_server1/home
1[root@bogon~]# lvextend -L 70G /dev/vg_server1/home
需要注意的是,当逻辑分区空间大小改变之后,使用df命令查看却并不能立即看到这种变化,这时就需要使用resize2fs命令
resize2fs命令被用来增大或者收缩未加载的“ext2/ext3”文件系统的大小,前提条件是内核支持在线resize。如果文件系统是处于mount状态下,那么它只能做到扩容
因此还需要执行以下命令:
Shell
[root@bogon ~]# resize2fs /dev/vg_server1/home
1[root@bogon~]# resize2fs /dev/vg_server1/home
(2)使用lvreduce命令减小LVM逻辑分区容量:
i)取消分区挂载:
Shell
[root@bogon ~]# umount /dev/vg_server1/home
1[root@bogon~]# umount /dev/vg_server1/home
ii)使用e2fsck命令检查分区是否正常:
Shell
[root@bogon ~]# e2fsck -a -f /dev/vg_server1/home
1[root@bogon~]# e2fsck -a -f /dev/vg_server1/home
iii)使用lvreduce命令减小分区容量:
lvreduce命令的主要参数类似于上面的lvextend命令,略
减小10G容量:
Shell
[root@bogon ~]# lvreduce -L -10G /dev/vg_server1/home
1[root@bogon~]# lvreduce -L -10G /dev/vg_server1/home
直接减小到50G容量:
Shell
[root@bogon ~]# lvreduce -L 50G /dev/vg_server1/home
1[root@bogon~]# lvreduce -L 50G /dev/vg_server1/home
(3)使用lvresize命令增加或减小LVM逻辑分区容量:
lvresize命令用于调整LVM逻辑卷的空间大小,可以增大空间和缩小空间。使用lvresize命令调整逻辑卷空间大小和缩小空间时需要谨慎,因为它有可能导致数据丢失
i)使用e2fsck命令检查分区是否正常:
Shell
[root@bogon ~]# e2fsck -a -f /dev/vg_server1/home
1[root@bogon~]# e2fsck -a -f /dev/vg_server1/home
ii)增加10G容量:
Shell
[root@bogon ~]# lvresize -L +10G /dev/vg_server1/home
1[root@bogon~]# lvresize -L +10G /dev/vg_server1/home
iii)减小10G容量:
Shell
[root@bogon ~]# lvresize -L -10G /dev/vg_server1/home
1[root@bogon~]# lvresize -L -10G /dev/vg_server1/home
(4)使用lvremove命令删除LVM逻辑分区:
lvremove命令:用于删除指定LVM逻辑卷。如果逻辑卷已经使用mount命令挂载,则不能使用lvremove命令删除。必须先使用umount命令取消挂载后,方可使用lvremove命令删除
主要参数:-f:强制删除
测试之前先创建一个100M的名为“lv_test”的LVM逻辑分区:
Shell
[root@bogon ~]# lvcreate -L 100M -n lv_test vg_server1
1[root@bogon~]# lvcreate -L 100M -n lv_test vg_server1
通过lvdisplay命令可以发现新创建的逻辑卷的路径为:/dev/vg_server1/lv_test
然后删除这个逻辑分区:
Shell
[root@bogon ~]# lvremove /dev/vg_server1/lv_test
1[root@bogon~]# lvremove /dev/vg_server1/lv_test
Do you really want to remove active logical volume lv_test? [y/n]: y
Logical volume “lv_test” successfully removed
类似的命令还有:vgremove命令:用于删除LVM卷组
pvremove命令:用于删除一个存在的物理卷
(5)使用vgextend命令动态扩展LVM卷组:
vgextend命令用于动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量。LVM卷组中的物理卷可以在使用vgcreate命令创建卷组时添加,也可以使用vgextend命令动态地添加
将物理卷“/dev/xvdb2”添加到卷组“vg_server1”:
Shell
[root@bogon ~]# vgextend vg_server1 /dev/xvdb2
1[root@bogon~]# vgextend vg_server1 /dev/xvdb2
参考: