基本的逻辑卷管理概念: PV(Physical Volume)- 物理卷 物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。 VG(Volumne Group)- 卷组 卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。 LV(Logical Volume)- 逻辑卷 逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
关系图如下:
PE(Physical Extent)- 物理块 LVM 默认使用4MB的PE区块,而LVM的LV最多仅能含有65534个PE (lvm1 的格式),因此默认的LVM的LV最大容量为4M*65534/(1024M/G)=256G。PE是整个LVM 最小的储存区块,也就是说,其实我们的资料都是由写入PE 来处理的。简单的说,这个PE 就有点像文件系统里面的block 大小。所以调整PE 会影响到LVM 的最大容量!不过,在 CentOS 6.x 以后,由于直接使用 lvm2 的各项格式功能,因此这个限制已经不存在了。
创建LVM系统分区方式的主要步骤如下:
1. 添加新的物理磁盘 2. 创建新的分区,最多可分配【3个主分区,1个扩展分区】 或 【4个主分区】,扩展分区又可以有多个分区; window常见的分配方式: 方式1:[1个主分区(C盘) 1个扩展分区(包括3个分区,D,E,F盘)] 方式2:[4个主分区,分别作为:C、D、E、F盘] 若是使用LVM方式分区,分区时最好选择LVM分区方式; 3. 创建PV; 4. 创建VG; 5. 创建LV; 6. 格式化LV,ext3,ext4等格式; 7. 挂载LV到指定目录; 8. 将挂载信息写入:/etc/fstab; 9. LVM扩容操作 9.1 LV的扩容; (1) 使用VG的Free空间,对LV扩容; (2) 完成后需要在对文件系统扩容; 9.2 VG的扩容 方式1: 通过增加PV来实现 方式2: 通过扩展raid(磁盘阵列)设备的容量来间接对VG扩容 10. LVM缩减操作 10.1 LV的缩减 10.2 VG的缩减 11. 删除LVM
其他说明:
凡是以“#”开头的行,都表示linux指令,如:
代码语言:javascript复制# fdisk -l
表示的是:
代码语言:javascript复制[root@localhost ~]# fdisk -l
如下是最初的系统基本信息:
操作系统:Centos7;
代码语言:javascript复制[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 1.8G 45G 4% /
devtmpfs 16G 0 16G 0% /dev
tmpfs 16G 0 16G 0% /dev/shm
tmpfs 16G 1.6G 15G 11% /run
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/vda1 976M 115M 795M 13% /boot
/dev/mapper/centos-home 139G 38G 95G 29% /home
tmpfs 3.2G 0 3.2G 0% /run/user/0
代码语言:javascript复制[root@localhost ~]# fdisk -l
Disk /dev/vda: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000a9e75
Device Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 419430399 208665600 8e Linux LVM
Disk /dev/mapper/centos-root: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 8455 MB, 8455716864 bytes, 16515072 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-home: 151.5 GB, 151523426304 bytes, 295944192 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/vdb: 536.9 GB, 536870912000 bytes, 1048576000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
说明:
上面这些是安装完系统时就存在的,为方便后续的描述,在进行“df -h”时,省略掉了这些,其他指令也有部分省略。
一、创建系统分区
选择/dev/sdb创建分区;
将整个vdb磁盘划分为一个vdb1分区,格式为Linux LVM;
由于显示信息过长,这里省略了部分不重要的显示信息。
代码语言:javascript复制# fdisk /dev/vdb
Command (m for help): n (创建新分区)
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p (选择创建主分区)
Partition number (1-4, default 1): 1 (分区号选择1)
First sector (2048-31457279, default 2048):
Using default value 2048
Last sector, sectors or size{K,M,G} (2048-31457279, default 31457279):
Using default value 31457279
Partition 1 of type Linux and of size 15 GiB is set
Command (m for help): p (查看已经创建的分区)
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
Device Boot Start End Blocks Id System
/dev/vdb1 2048 31457279 15727616 83 Linux (系统默认为83,即:Linux)
Command (m for help): t (修改分区格式)
Selected partition 1
Hex code (type L to list all codes): 8e (8e为Linux LVM格式)
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): p
Disk /dev/sdb: 16.1 GB, 16106127360 bytes, 31457280 sectors
Device Boot Start End Blocks Id System
/dev/vdb1 2048 31457279 15727616 8e Linux LVM
Command (m for help): w
二、创建PV
首先说明一些简单指令,常见的查看指令包括如下三种:
- pv相关:pvdisplay、pvs、pvscan,pvcreate
- vg相关:vgdisplay、vgs、vgscan,vgcreate
- lv相关:lvdisplay、lvs、lvscan,lvcreate
# pvcreate /dev/vdb1 (创建PV)
# pvdisplay
"/dev/vdb1" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 10.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID dZRM2W-X2Lz-I3Jz-i4S4-E8fN-BF4K-oZqhd3
# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb1 lvm2 --- 10.00g 10.00g
# pvscan
PV /dev/vdb1 lvm2 [10.00 GiB]
三、创建VG
创建VG时,可以使用如下几种方式来创建
- raid:磁盘阵列;
- 分区,如:/dev/vdb1;
- 整个磁盘,如:/dev/vdc;
#vgcreate vgextdata /dev/vdb1
Volume group "vgextdata" successfully created
使用分区/dev/sdb1 和 磁盘/dev/sdc 来创建vg,并设置PE大小为64M
# pvs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- <199.00g 4.00m
vgextdata 1 0 0 wz--n- <500.00g <500.00g
# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 0 0 wz--n- 19.99g 19.99g
上面知道:/dev/sdb1和/dev/sdb都是10G,所以vg0的大小为19.99G;
--- Volume group ---
--- Volume group ---
VG Name vgextdata
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size <500.00 GiB
PE Size 4.00 MiB
Total PE 127999
Alloc PE / Size 0 / 0
Free PE / Size 127999 / <500.00 GiB
VG UUID KDysf3-BRv7-2X5O-RoMq-PyTy-Oz5n-8nWX29
四、创建LV-->格式化LV-->挂载LV
关于LV的操作主要有3个步骤,分别为:
- 创建LV;
- 格式化LV,如:ext3,ext4等;
- 挂载LV到指定目录下;
使用vg0创建lv1,初始大小设置为8G
代码语言:javascript复制# lvcreate -l 100%free -n lvextdata vgextdata
Logical volume "lvextdata" created.
#lvcreate -l 数字%free -n lv名 卷名:根据百分比自动分配剩余空间,如分配剩余空间的30%:lvcreate -l 30%free -n lv2 vg0:
#lvcreate -L 8G -n lv1 vg0
# Logical volume "lv1" created.
# 从vg0中分出8G的空间给lv1使用
# vgs
centos 1 3 0 wz--n- <199.00g 4.00m
vgextdata 1 1 0 wz--n- <500.00g 0
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home centos -wi-ao---- <141.12g
root centos -wi-ao---- 50.00g
swap centos -wi-ao---- <7.88g
lvextdata vgextdata -wi-a----- <500.00g
# lvdisplay
--- Logical volume ---
LV Path /dev/vgextdata/lvextdata
LV Name lvextdata
VG Name vgextdata
LV UUID 3kLHjR-jJUe-BmCo-Fajn-7Gdh-QI7Q-TD8cMN
LV Write Access read/write
LV Creation host, time hngc-svr-mwd04, 2021-12-13 11:14:03 0800
LV Status available
# open 0
LV Size <500.00 GiB
Current LE 127999
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:3
使用ext3文件系统对LV进行格式化
代码语言:javascript复制# mkfs.ext4 /dev/vgextdata/lvextdata
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
32768000 inodes, 131070976 blocks
6553548 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2279604224
4000 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, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
将lvextdata挂载到/data目录下
代码语言:javascript复制# mkdir /data
# mount /dev/vgextdata/lvextdata /data
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vgextdata-lvextdata ext4 493G 73M 467G 1% /data
开机启动
# echo '/dev/vgextdata/lvextdata /data ext4 defaults 0 0' >> /etc/fstab
五、LV扩容
LV的扩容主要分2个步骤:
- 使用VG的Free空间,对LV扩容;
- 完成后需要在对文件系统扩容;
查看vg的容量,考虑从vg中再分配一些空间给LV
代码语言:javascript复制# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 2 1 0 wz--n- 19.99g 11.99g
现在还有11.99G可用
# lvextend -L 3G /dev/vg0/lv1
Size of logical volume vg0/lv1 changed from 8.00 GiB (2048 extents) to 11.00 GiB (2816 extents).
Logical volume lv1 successfully resized.
将lv1添加3G容量
# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- 99.45g 4.00m
vg0 2 1 0 wz--n- 19.99g 8.99g
由原先的11.99G可用变为8.99G可用
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg0 -wi-ao---- 11.00g
由原先的8G增加到了11G
对文件系统进行扩容
代码语言:javascript复制# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 ext3 7.8G 19M 7.4G 1% /mnt/lv1
可是发现实际容量并没有变化,还是7.8G
这时需要对文件系统进行扩容
下面是扩容指令:
代码语言:javascript复制# resize2fs /dev/vg0/lv1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg0/lv1 is mounted on /mnt/lv1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg0/lv1 is now 2883584 blocks long.
对文件系统扩容
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 ext3 11G 21M 11G 1% /mnt/lv1
发现此时lv1的容量变为了11G
六、VG扩容
主要有两种扩容方式:
- 方式1: 通过增加PV来实现
- 方式2: 通过扩展RAID(磁盘阵列)设备的容量来间接对VG扩容(这里不进行展示)
<方式1>: 通过增加PV来实现
使用/dev/sdd来创建一个PV
代码语言:javascript复制# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created
创建PV
# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 vg0 lvm2 a-- 10.00g 0
/dev/sdc vg0 lvm2 a-- 10.00g 8.99g
/dev/sdd lvm2 --- 15.00g 15.00g
新增加的PV有15G
# vgextend vg0 /dev/sdd
Volume group "vg0" successfully extended
使用PV对VG扩容
# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 3 1 0 wz--n- 34.99g 23.99g
扩容后的vg0由19.99G变为了34.99G
<方式2>: 通过扩展raid(磁盘阵列)设备的容量来间接对VG扩容
这里不进行阐述