一、LVM简介
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制.Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。
二、基本术语
- 物理卷(Physical Volume,PV):指系统的物理存储设备:磁盘,如:/dev/hda、/dev/sda等,是存储系统最底层的存储单元;
- 卷组(Volume Group,VG):类似于非LVM系统中的物理磁盘,其由一个或多个物理卷PV组成。可以在卷组上创建一个或多个LV(逻辑卷);
- 逻辑卷(Logical Volume,LV):类似于非LVM系统中的磁盘分区,逻辑卷建立在卷组VG之上。在逻辑卷LV之上可以建立文件系统(比如/home或者/usr等)。
从上面的定义我们可以了解到:逻辑卷(LV)是建立在卷组(VG)上的,而卷组(VG)则是建立在物理卷(PV)上的。
从中还可以作更深一层的理解:LVM的可伸缩性无非是建立在卷组(VG)和逻辑卷(LV)的可伸缩性的基础上的:
- 只要存在尚未使用的磁盘或者分区,就可以动态的扩展卷组(VG)的大小;
- 只要卷组(VG)中存在尚未分配的空间,就可以动态的扩展逻辑卷的大小。
从以上二点出发就可以达到动态调整分区大小的目的。
因为本文中很多的命令都是以上述术语的缩写开头,因此了解各个缩写对命令的记忆和使用是非常有帮助的。
三、基本命令
示例中的 vg1
和 lv1
分别为物理卷组名
和逻辑卷名
,可自行替换成任意名称。
分类 | 命令 | 说明 | 示例 |
---|---|---|---|
PV | pvcreate | 创建物理卷 | pvcreate /dev/sdb1 |
PV | pvdisplay | 显示已创建的物理卷的详细信息 | |
PV | pvs | 显示已创建的物理卷的汇总信息 | |
PV | pvremove | 删除物理卷 | pvremove /dev/sdb1 |
VG | vgcreate | 创建卷组 | pvcreate vg1 /dev/sdb1 /dev/sdb2 … |
VG | vgdisplay | 显示已创建的卷组的详细信息 | |
VG | vgs | 显示已创建的卷组的汇总信息 | |
VG | vgextend | 扩展卷组 | vgextend vg1 /dev/sdb3 … |
VG | vgreduce | 收缩卷组 | vgreduce vg1 /dev/sdb5 |
VG | vgremove | 删除卷组 | vgremove vg1 |
LV | lvcreate | 创建逻辑卷 | lvcreate -L 1000M -n lv1 vg1 |
LV | lvdisplay | 显示已创建的逻辑卷的详细信息 | |
LV | lvs | 显示已创建的逻辑卷的汇总信息 | |
LV | lvresize | 重设逻辑卷大小 | lvresize -L 1000M /dev/vg1/lv1 |
LV | resize2fs | 更新逻辑卷信息(ext4) | resize2fs /dev/vg1/lv1 |
LV | lvremove | 删除逻辑卷 | lvremove /dev/vg1/lv1 |
LV | xfs_growfs | 更新逻辑卷信息(xfs) | xfs_growfs /dev/vg1/lv1 |
LV | e2fsck | 检查逻辑卷错误(ext4) | e2fsck -f /dev/vg1/lv1 |
四、实验的操作环境
- 虚拟机:VirtualBox 5.6.2
- 操作系统:CentOS 7.4
- 磁盘:二块:一块安装操作系统(/dev/sda),容量为20GB; 另一块用于进行lvm分区操作(/dev/sdb),容量为10GB
- 因为CentOS 7.4默认没有安装支持上述命令的软件包,因此需要提前安装
lvm2
软件包,具体命令为:yum install -y lvm2
五、创建LVM
在这里我带着大家从一块全新的磁盘开始,一步步创建LVM分区。
流程
先介绍一下流程,以便大家从总体上对创建LVM有一个了解。
1. 对新磁盘进行分区操作(fdisk
);
2. 逐一变更分区类型为Linux LVM
(Hex代码为:8e
);
3. 针对每个分区创建物理卷(pvcreate
);
4. 创建卷组(vgcreate
);
5. 创建逻辑卷(lvcreate
);
6. 格式化(mkfs.ext4
/mkfs.xfs
),并挂载(mount
)。
(一)、磁盘分区及分区类型更改
使用命令fdisk
对需要进行LVM操作的磁盘/dev/sdb
进行分区
fdisk /dev/sdb
输入n
进行分区,一共分五个分区,前三个是主分区,后二个分区在扩展分区里,每个分区2GB。以下只列出第一个分区的操作:
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (4196352-20971519,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-20971519,默认为 20971519):+2G
分区 2 已设置为 Linux 类型,大小设为 2 GiB
输入p
打印分区完成后的情况:
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x231b271d
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 8390655 2097152 83 Linux
/dev/sdb3 8390656 12584959 2097152 83 Linux
/dev/sdb4 12584960 20971519 4193280 5 Extended
/dev/sdb5 12587008 16781311 2097152 83 Linux
/dev/sdb6 16783360 20971519 2094080 83 Linux
分区完成后除了扩展分区(上图的Extended)外,需要变更所有分区的磁盘类型:原类型为Linux
,变更后为Linux LVM
。这里只列出针对第一个分区的操作:
命令(输入 m 获取帮助):t
分区号 (1-6,默认 6):1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
输入p
打印分区类型变更后的情况:
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x231b271d
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 8e Linux LVM
/dev/sdb2 4196352 8390655 2097152 8e Linux LVM
/dev/sdb3 8390656 12584959 2097152 8e Linux LVM
/dev/sdb4 12584960 20971519 4193280 5 Extended
/dev/sdb5 12587008 16781311 2097152 8e Linux LVM
/dev/sdb6 16783360 20971519 2094080 8e Linux LVM
以上操作完成后,输入w
将操作写入磁盘,完成分区:
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
(二)、创建物理卷
针对新创建的分区创建物理卷,这是创建LVM的第一步。使用如下命令对每一个分区进行操作:
pvcreate /dev/sdb1
其他分区的操作类似,这里就不逐一介绍了。
创建完物理卷后,有二种查看的方法:
1、详细信息:pvdisplay,这里只列出第一个分区的信息:
[root@localhost ~]# pvdisplay
"/dev/sdb1" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID SCIOKN-i2fO-PylF-CJGI-T8Yw-e2dH-BYX0xq
2、汇总信息:pvs
[root@localhost ~]# pvs