1.LVM简介
LVM 是 Logical Volume Manager 的缩写,中文一般翻译为 "逻辑卷管理",它是 Linux 下对磁盘分区进行管理的一种机制。LVM 是建立在磁盘分区和文件系统之间的一个逻辑层,系统管理员可以利用 LVM 在不重新对磁盘分区的情况下动态的调整分区的大小。如果系统新增了一块硬盘,通过 LVM 就可以将新增的硬盘空间直接扩展到原来的磁盘分区上。
1.1 LVM架构
1.2 LVM工作原理
LVM通过将底层的物理硬盘封装起来,以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取。而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。
2.LVM组件
2.1 物理卷(PV, Physical Volume)
物理卷就是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有和LVM相关的管理参数.
- 使用
pvcreate /dev/sdb1
来基于sdb1分区创建PV
2.2 卷组(VG, Volume Group)
VG由若干PV组成,能在VG上创建一个或多个LV。VG是PV和LV中间的层,可以通过调整VG中的PV来调整VG的容量,进而调整LV的分配情况.
- 使用
vgcreate vg01 /dev/sdb1
创建vg并添加sdb1对应的pv - 使用
vgextend vg01 /dev/sdb2
向vg中继续添加pv
2.3 逻辑卷(LV, Logical Volume)
LV是从VG上分配出的一块空间,用于建立文件系统,相当于非LVM模式的磁盘分区。
- 使用
lvcreate -L 10M -n lv01 vg01
在vg上创建lv并指定初始大小为10M - 使用
lvextend -L +200M /dev/vg01/lv01
扩展lv01的大小为100M,前提是vg01中有未使用的空间 - 创建出的lv需要格式化成指定文件系统,才能进行挂载操作
3.LVM操作
3.0 安装
bash
yum lvm2 -y
yum lvm2 -y
3.1 创建新的LVM
创建LVM流程:pvcreate创建pv -> vgcreate创建卷组 -> lvcreate创建逻辑卷 -> mkfs.xfs lv 格式化-> mount挂载
1.查看分区
bash
#sdb sdc 为新添加磁盘
[root@other ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 2G 0 disk
sr0 11:0 1 1024M 0 rom
sdc 8:32 0 2G 0 disk
sda 8:0 0 30G 0 disk
├─sda2 8:2 0 29G 0 part
│ ├─centos-swap 253:1 0 2G 0 lvm
│ └─centos-root 253:0 0 27G 0 lvm /
└─sda1 8:1 0 1G 0 part /boot
#sdb sdc 为新添加磁盘
[root@other ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 2G 0 disk
sr0 11:0 1 1024M 0 rom
sdc 8:32 0 2G 0 disk
sda 8:0 0 30G 0 disk
├─sda2 8:2 0 29G 0 part
│ ├─centos-swap 253:1 0 2G 0 lvm
│ └─centos-root 253:0 0 27G 0 lvm /
└─sda1 8:1 0 1G 0 part /boot
2.创建pv
以整个磁盘创建,不再创建分区
bash
[root@other ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
[root@other ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
3.创建vg
bash
#查看pv
[root@other ~]# pvdisplay
--- Physical volume ---
"/dev/sdb" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID CC6hZs-KUBT-AX0j-Fiz1-uscf-lhpM-Etme4a
#创建vg0
[root@other ~]# vgcreate vg0 /dev/sdb
Volume group "vg0" successfully created
#查看
[root@other ~]# vgdisplay
--- Volume group ---
VG Name vg0
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 <2.00 GiB
PE Size 4.00 MiB
Total PE 511
Alloc PE / Size 0 / 0
Free PE / Size 511 / <2.00 GiB
VG UUID fAz9gY-ov9y-EhOl-Re1H-L1yq-8Ccw-JZjMMC
#查看pv
[root@other ~]# pvdisplay
--- Physical volume ---
"/dev/sdb" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID CC6hZs-KUBT-AX0j-Fiz1-uscf-lhpM-Etme4a
#创建vg0
[root@other ~]# vgcreate vg0 /dev/sdb
Volume group "vg0" successfully created
#查看
[root@other ~]# vgdisplay
--- Volume group ---
VG Name vg0
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 <2.00 GiB
PE Size 4.00 MiB
Total PE 511
Alloc PE / Size 0 / 0
Free PE / Size 511 / <2.00 GiB
VG UUID fAz9gY-ov9y-EhOl-Re1H-L1yq-8Ccw-JZjMMC
4.创建lv
bash
语法:lvcreate -l 100%FREE -n lv_name vg_name
#创建逻辑卷组,-n参数指定新建逻辑卷的名称(我命名为lv0),-l 100%FREE表示添加卷组内所有剩余空间
[root@other ~]# lvcreate -l 100%FREE -n lv0 vg0
Logical volume "lv0" created.
#查看
[root@other ~]# lvdisplay
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID OUHWK5-o8ca-SpYM-Tvz1-26E8-paGJ-2bjOUB
LV Write Access read/write
LV Creation host, time localhost, 2023-04-03 05:16:07 +0800
LV Status available
# open 1
LV Size 26.99 GiB
Current LE 6910
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
语法:lvcreate -l 100%FREE -n lv_name vg_name
#创建逻辑卷组,-n参数指定新建逻辑卷的名称(我命名为lv0),-l 100%FREE表示添加卷组内所有剩余空间
[root@other ~]# lvcreate -l 100%FREE -n lv0 vg0
Logical volume "lv0" created.
#查看
[root@other ~]# lvdisplay
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID OUHWK5-o8ca-SpYM-Tvz1-26E8-paGJ-2bjOUB
LV Write Access read/write
LV Creation host, time localhost, 2023-04-03 05:16:07 +0800
LV Status available
# open 1
LV Size 26.99 GiB
Current LE 6910
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
5.挂载lv
bash
#查看
[root@other ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg0 lvm2 a-- <2.00g 0
[root@other ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 1 0 wz--n- <2.00g 0
[root@other ~]# lvs #查看详细信息可用lvdisplay
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-a----- <2.00g
#格式化
# 根据相应的文件系统格式化逻辑卷,例如使用ext4文件系统
mkfs.ext4 /dev/vg0/lv0
#查看格式化之后的lvm
[root@other ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 2G 0 disk
└─vg0-lv0 253:2 0 2G 0 lvm
#挂载
[root@other ~]# mount /dev/vg0/lv0 /yun
[root@other ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg0-lv0 2.0G 6.0M 1.9G 1% /yun
#永久挂载
[root@other ~]# blkid /dev/vg0/lv0
/dev/vg0/lv0: UUID="5120bf87-aa29-4e64-8c87-a7972924946c" TYPE="ext4"
# 编辑/etc/fstab文件,将lv0的信息添加在新行
[root@other ~]# vim /etc/fstab
UUID=5120bf87-aa29-4e64-8c87-a7972924946c /yun ext4 defaults 0 0
#重新挂载
[root@other ~]# mount -a
#查看
[root@other ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg0 lvm2 a-- <2.00g 0
[root@other ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 1 1 0 wz--n- <2.00g 0
[root@other ~]# lvs #查看详细信息可用lvdisplay
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-a----- <2.00g
#格式化
# 根据相应的文件系统格式化逻辑卷,例如使用ext4文件系统
mkfs.ext4 /dev/vg0/lv0
#查看格式化之后的lvm
[root@other ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 2G 0 disk
└─vg0-lv0 253:2 0 2G 0 lvm
#挂载
[root@other ~]# mount /dev/vg0/lv0 /yun
[root@other ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg0-lv0 2.0G 6.0M 1.9G 1% /yun
#永久挂载
[root@other ~]# blkid /dev/vg0/lv0
/dev/vg0/lv0: UUID="5120bf87-aa29-4e64-8c87-a7972924946c" TYPE="ext4"
# 编辑/etc/fstab文件,将lv0的信息添加在新行
[root@other ~]# vim /etc/fstab
UUID=5120bf87-aa29-4e64-8c87-a7972924946c /yun ext4 defaults 0 0
#重新挂载
[root@other ~]# mount -a
3.2 扩容LVM
1.扩容pv
bash
#吧sdc加入到pv中
#查看
[root@other ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 2G 0 disk
└─vg0-lv0 253:2 0 2G 0 lvm
sr0 11:0 1 1024M 0 rom
sdc 8:32 0 2G 0 disk
[root@other ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <29.00g 4.00m
/dev/sdb vg0 lvm2 a-- <2.00g 0
[root@other ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
[root@other ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <29.00g 4.00m
/dev/sdb vg0 lvm2 a-- <2.00g 0
/dev/sdc lvm2 --- 2.00g 2.00g
#吧sdc加入到pv中
#查看
[root@other ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 2G 0 disk
└─vg0-lv0 253:2 0 2G 0 lvm
sr0 11:0 1 1024M 0 rom
sdc 8:32 0 2G 0 disk
[root@other ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <29.00g 4.00m
/dev/sdb vg0 lvm2 a-- <2.00g 0
[root@other ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
[root@other ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <29.00g 4.00m
/dev/sdb vg0 lvm2 a-- <2.00g 0
/dev/sdc lvm2 --- 2.00g 2.00g
2.扩容vg
bash
#对现有vg0扩容
[root@other ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <29.00g 4.00m
vg0 1 1 0 wz--n- <2.00g 0
#把sdc加入进来
[root@other ~]# vgextend vg0 /dev/sdc
Volume group "vg0" successfully extended
#查看
[root@other ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <29.00g 4.00m
vg0 2 1 0 wz--n- 3.99g <2.00g
#对现有vg0扩容
[root@other ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <29.00g 4.00m
vg0 1 1 0 wz--n- <2.00g 0
#把sdc加入进来
[root@other ~]# vgextend vg0 /dev/sdc
Volume group "vg0" successfully extended
#查看
[root@other ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <29.00g 4.00m
vg0 2 1 0 wz--n- 3.99g <2.00g
3.扩容lv
bash
#查看lv名字
[root@other ~]# lvdisplay
#扩容剩余所有存储空间
[root@other ~]# lvextend -l +100%FREE /dev/vg0/lv0
Size of logical volume vg0/lv0 changed from <2.00 GiB (511 extents) to 3.99 GiB (1022 extents).
Logical volume vg0/lv0 successfully resized.
#查看lv名字
[root@other ~]# lvdisplay
#扩容剩余所有存储空间
[root@other ~]# lvextend -l +100%FREE /dev/vg0/lv0
Size of logical volume vg0/lv0 changed from <2.00 GiB (511 extents) to 3.99 GiB (1022 extents).
Logical volume vg0/lv0 successfully resized.
- 调整文件系统
bash
#对于ext4,ext3 使用resize2fs
[root@other ~]# resize2fs /dev/vg0/lv0
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 1046528 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 1046528 blocks long.
#对于xfs类型,使用xfs_growfs 挂载点
xfs_growfs -d /dev/vg0/lv0
#对于ext4,ext3 使用resize2fs
[root@other ~]# resize2fs /dev/vg0/lv0
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 1046528 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 1046528 blocks long.
#对于xfs类型,使用xfs_growfs 挂载点
xfs_growfs -d /dev/vg0/lv0
3.3缩减LVM
3.4 删除LVM
删除LVM流程:umount卸载 -> lvremove lv移出卷组中所有逻辑卷-> vgremove vg移出卷组-> pvremove 移出pv
1.查看
bash
[root@other ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 26.99g
swap centos -wi-a----- 2.00g
lv0 vg0 -wi-a----- 3.99g
[root@other ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 26.99g
swap centos -wi-a----- 2.00g
lv0 vg0 -wi-a----- 3.99g
2.删除lv
bash
[root@other ~]# lvremove /dev/vg0/lv0
Do you really want to remove active logical volume vg0/lv0? [y/n]: y
Logical volume "lv0" successfully removed
[root@other ~]# lvremove /dev/vg0/lv0
Do you really want to remove active logical volume vg0/lv0? [y/n]: y
Logical volume "lv0" successfully removed
3.删除vg
bash
[root@other ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <29.00g 4.00m
vg0 2 0 0 wz--n- 3.99g 3.99g
[root@other ~]# vgremove vg0
Volume group "vg0" successfully removed
[root@other ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <29.00g 4.00m
vg0 2 0 0 wz--n- 3.99g 3.99g
[root@other ~]# vgremove vg0
Volume group "vg0" successfully removed
4.删除pv
bash
[root@other ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <29.00g 4.00m
/dev/sdb lvm2 --- 2.00g 2.00g
/dev/sdc lvm2 --- 2.00g 2.00g
[root@other ~]# pvremove /dev/sdc /dev/sdb
Labels on physical volume "/dev/sdc" successfully wiped.
Labels on physical volume "/dev/sdb" successfully wiped.
[root@other ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <29.00g 4.00m
/dev/sdb lvm2 --- 2.00g 2.00g
/dev/sdc lvm2 --- 2.00g 2.00g
[root@other ~]# pvremove /dev/sdc /dev/sdb
Labels on physical volume "/dev/sdc" successfully wiped.
Labels on physical volume "/dev/sdb" successfully wiped.