文章目录
逻辑卷 LVM 存储技术
环境准备
虚拟机添加3块20G硬盘,sdb sdc sdd
[root@centos7 ~]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
逻辑卷基本管理
硬盘分区管理方案缺点
- 硬盘分区空间必须使用连续空间,所以硬盘分区扩容很麻烦,特别是要扩容的分区后没有空间。
- 使用硬盘分区创建的文件系统不同跨多个硬盘,受单个硬盘容量限制。
- 如果硬盘损坏,则文件系统中数据也会丢失。
逻辑卷管理硬盘方案优点
- 使用逻辑卷可以更加灵活地扩展和缩减文件系统空间。
- 使用逻辑卷创建的文件系统可以跨多个硬盘,适合创建超大容量文件系统。
- 使用逻辑卷可以创建镜像卷,保证数据的冗余性。即使单个硬盘损坏,文件系统中数据也会丢失。
- 使用逻辑卷还可以创建快照,保留某一时刻数据,就像虚拟机快照一样。
逻辑卷基本概念
LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。
- 物理卷(PV, Physical Volume),是LVM的基本存储逻辑块,通过块设备创建。块设备是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID)。与基本的物理存储介质(如分区、磁盘等)相比,物理卷包含有和LVM相关的管理参数。
- 卷组(VG, Volume Group),是一个逻辑的存储空间,由一个或多个物理卷组成。
- 逻辑卷(LV, Logical Volume),是从卷组中创建出来的一个逻辑空间。如果把一个卷组类比为一个逻辑硬盘,那么逻辑卷则可以类比为一个硬盘分区,所以也可以在逻辑卷之上创建文件系统。
简单地说:卷组由多个物理卷组成,可以在卷组中创建多个逻辑卷,对逻辑卷创建文件系统给用户使用。
LVM管理基本流程:
- 创建物理卷
- 创建卷组
- 创建逻辑卷
创建物理卷
# 创建单个PV
[root@centos7 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
# 此次创建多个PV
[root@centos7 ~]# pvcreate /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
# 查看PV列表
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm2 --- 20.00g 20.00g
/dev/sdd lvm2 --- 20.00g 20.00g
# 查看单个PV详细信息
[root@centos7 ~]# 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 MBHW0w-OkJL-CasO-PYRR-sduS-U2m5-zdkQ5d
创建卷组
# 创建包涵单个PV的VG
[root@centos7 ~]# vgcreate webapp /dev/sdb
Volume group "webapp" successfully created
# 创建包涵多个PV的VG
[root@centos7 ~]# vgcreate dbapp /dev/sd{c,d}
Volume group "dbapp" successfully created
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a-- <20.00g <20.00g
/dev/sdc dbapp lvm2 a-- <20.00g <20.00g
/dev/sdd dbapp lvm2 a-- <20.00g <20.00g
# 查看VG列表
[root@centos7 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
dbapp 2 0 0 wz--n- 39.99g 39.99g
webapp 1 0 0 wz--n- <20.00g <20.00g
# 查看单个VG详细信息
[root@centos7 ~]# vgdisplay dbapp
--- Volume group ---
VG Name dbapp
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 39.99 GiB
# PE,Physical Extend,是PV的最小存储单元。
# 在创建VG时,可通过-s选项设置。
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 0 / 0
Free PE / Size 10238 / 39.99 GiB
VG UUID kjY26m-D0ax-WmMq-fMJv-1Tnb-imqh-GOAWkG
创建逻辑卷
# 在卷组webapp中创建一个逻辑卷:名称为webapp01,大小为5G。
[root@centos7 ~]# lvcreate -n webapp01 -L 5G webapp
Logical volume "webapp01" created.
# 在卷组dbapp中创建一个跨硬盘逻辑卷:名称为data01,大小为25G。
[root@centos7 ~]# lvcreate -n data01 -L 25G dbapp
Logical volume "data01" created.
# 查看LV列表
[root@centos7 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data01 dbapp -wi-a----- 25.00g
webapp01 webapp -wi-a----- 5.00g
逻辑卷设备名支持以下三种格式:
- /dev/vname/lvame
- /dev/mapper/vname-lvame
- /dev/dm-N
[root@centos7 ~]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01
lrwxrwxrwx 1 root root 7 6月 17 18:26 /dev/dbapp/data01 -> ../dm-4
lrwxrwxrwx 1 root root 7 6月 17 18:26 /dev/mapper/dbapp-data01 -> ../dm-4
# 查看单个LV详细信息
[root@centos7 ~]# lvdisplay /dev/dbapp/data01
--- Logical volume ---
LV Path /dev/dbapp/data01
LV Name data02
VG Name dbapp
LV UUID W8UafB-A7RJ-dBjM-bsA2-8Obc-p8gE-bMZgmm
LV Write Access read/write
LV Creation host, time centos7.linux.com, 2022-12-26 11:42:40 +0800
LV Status available
# open 0
LV Size 25.00 GiB
# LE,Logical Extend,是LV的最小存储单元。
# 通常一个LE对应于一个PE。
Current LE 6400
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:4
# 可以看到:物理卷/dev/sdc空间已使用完,物理卷/dev/sdd空间已使用5G
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a-- <20.00g <15.00g
/dev/sdc dbapp lvm2 a-- <20.00g 0
/dev/sdd dbapp lvm2 a-- <20.00g 14.99g
# 可以看到逻辑卷/dev/dbapp/data01空间横跨2个硬盘
[root@centos7 ~]# lsblk /dev/sd{b..d}
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─webapp-webapp01 253:3 0 5G 0 lvm
sdc 8:32 0 20G 0 disk
└─dbapp-data01 253:4 0 25G 0 lvm
sdd 8:48 0 20G 0 disk
└─dbapp-data01 253:4 0 25G 0 lvm
创建文件系统
[root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html
# 基于lvm的文件系统持久化挂载,需要修改/etc/fstab文件。
清理
# 卸载文件系统
[root@centos7 ~]# umount /dev/webapp/webapp01
# 删除LV
[root@centos7 ~]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01
Do you really want to remove active logical volume webapp/webapp01? [y/n]: y
Logical volume "webapp01" successfully removed
Do you really want to remove active logical volume dbapp/data01? [y/n]: y
Logical volume "data01" successfully removed
# 删除VG
[root@centos7 ~]# vgremove webapp dbapp
Volume group "webapp" successfully removed
Volume group "dbapp" successfully removed
# 删除PV
[root@centos7 ~]# pvremove /dev/sd{b..d}
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
Labels on physical volume "/dev/sdd" successfully wiped.
扩展和缩减卷组
环境准备
# 创建卷组
[root@centos7 ~]# vgcreate webapp /dev/sdb
Physical volume "/dev/sdb" successfully created.
Volume group "webapp" successfully created
# 创建卷组的时候,如果指定的块设备不是物理卷,则会先将块设备创建为物理卷。
# 创建逻辑卷
[root@centos7 ~]# lvcreate -n webapp01 -L 10G webapp
Logical volume "webapp01" created.
扩展卷组
如果卷组空间不足,可以通过添加新的物理卷到卷组中,以扩展卷组容量。
[root@centos7 ~]# vgextend webapp /dev/sd{c,d}
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
Volume group "webapp" successfully extended
缩减卷组
如果卷组空间中有多余的物理卷或者物理卷容量小需要更换,则可以将物理卷从卷组中剔除。
删除物理卷前确保物理卷不在使用中。
# 查看物理卷使用状态
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a-- <20.00g <10.00g # /dev/sdb在使用
/dev/sdc webapp lvm2 a-- <20.00g <20.00g
/dev/sdd webapp lvm2 a-- <20.00g <20.00g
# 将物理卷/dev/sdb从卷组webapp中剔除,则会报错
[root@centos7 ~]# vgreduce webapp /dev/sdb
Physical volume "/dev/sdb" still in use
# 解决方法:将物理卷/dev/sdb中数据移动到卷组中其他物理卷
[root@centos7 ~]# pvmove /dev/sdb
# 或者移动到卷组中特定物理卷
[root@centos7 ~]# pvmove /dev/sdb /dev/sdd
/dev/sdb: Moved: 0.51%
/dev/sdb: Moved: 100.00%
# 查看物理卷使用状态
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb webapp lvm2 a-- <20.00g <20.00g # /dev/sdb不在使用
/dev/sdc webapp lvm2 a-- <20.00g <20.00g
/dev/sdd webapp lvm2 a-- <20.00g <10.00g # /dev/sdd在使用
# 再次剔除,成功
[root@centos7 ~]# vgreduce webapp /dev/sdb
Removed "/dev/sdb" from volume group "webapp"
[root@centos7 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc webapp lvm2 a-- <20.00g <20.00g
/dev/sdd webapp lvm2 a-- <20.00g <10.00g
扩展和缩减逻辑卷
扩展逻辑卷
如果逻辑卷空间不足,在卷组空间充足的情况下,也可以扩展逻辑卷空间。
# 逻辑卷增加2G空间
[root@centos7 ~]# lvextend -L +2G /dev/webapp/webapp01
Size of logical volume webapp/webapp01 changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
Logical volume webapp/webapp01 successfully resized.
[root@centos7 ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-a----- 12.00g
缩减逻辑卷
如果逻辑卷空间充足,希望将多余的空间缩减出来它用,也可以缩减逻辑卷空间。
[root@centos7 ~]# lvreduce -L -2G /dev/webapp/webapp01
WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce webapp/webapp01? [y/n]: `y`
Size of logical volume webapp/webapp01 changed from 12.00 GiB (3072 extents) to 10.00 GiB (2560 extents).
Logical volume webapp/webapp01 successfully resized.
[root@centos7 ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-a----- 10.00g
扩展和缩减文件系统
扩展 XFS 文件系统
XFS文件系统只支持扩展,不支持缩减。
环境准备:格式化文件系统,并创建数据
[root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01 [root@centos7 ~]# mkdir /var/www/html [root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html [root@centos7 ~]# cp /etc/host* /var/www/html [root@centos7 ~]# ls /var/www/html host.conf hostname hosts hosts.allow hosts.deny
# 第一步:扩展逻辑卷
[root@centos7 ~]# lvextend -L 15G /dev/webapp/webapp01
[root@centos7 ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 15.00g
# 第二步:扩展文件系统
[root@centos7 ~]# xfs_growfs /var/www/html
[root@centos7 ~]# df -h /var/www/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 15G 140M 15G 1% /var/www/html
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny
# 块设备和文件系统一并扩展
[root@centos7 ~]# lvextend -rL 20G /dev/webapp/webapp01
[root@centos7 ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 20.00g
[root@centos7 ~]# df -h /var/www/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 20G 176M 20G 1% /var/www/html
扩展 EXT4 文件系统
EXT4文件系统即支持扩展,也支持缩减。
环境准备:格式化文件系统,并创建数据
[root@centos7 ~]# umount /var/www/html [root@centos7 ~]# mkfs.ext4 /dev/webapp/webapp01 [root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html [root@centos7 ~]# df -h /var/www/html 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 24K 19G 1% /var/www/html [root@centos7 ~]# cp /etc/host* /var/www/html [root@centos7 ~]# ls /var/www/html host.conf hostname hosts hosts.allow hosts.deny
# 第一步:扩展逻辑卷
[root@centos7 ~]# lvextend -L 25G /dev/webapp/webapp01
[root@centos7 ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 25.00g
# 第二步:扩展文件系统
[root@centos7 ~]# resize2fs /dev/webapp/webapp01
[root@centos7 ~]# df -h /var/www/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 25G 36K 24G 1% /var/www/html
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts hosts.allow hosts.deny
# 块设备和文件系统一并扩展
[root@centos7 ~]# lvextend -rL 30G /dev/webapp/webapp01
[root@centos7 ~]# lvs /dev/webapp/webapp01
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
webapp01 webapp -wi-ao---- 30.00g
[root@centos7 ~]# df -h /var/www/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 30G 36K 28G 1% /var/www/html
缩减 EXT4 文件系统
缩减EXT4文件系统注意事项:
- 不支持在线缩减,必须卸载后缩减。
- 缩减后的容量,不能小于当前使用的容量。
ext4 减容流程:
- 卸载文件系统
- e2fsck 文件系统
- 缩减文件系统
- 缩减lv
- 挂载测试
具体操作如下:
# 第一步:卸载文件系统
[root@centos7 ~]# umount /var/www/html
# 第二步:检测文件系统
[root@centos7 ~]# e2fsck -f /dev/webapp/webapp01
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/webapp/webapp01:14/1966080 文件(0.0% 为非连续的), 167445/7864320 块
# 第三步:缩减文件系统
[root@centos7 ~]# resize2fs /dev/webapp/webapp01 10G
resize2fs 1.45.6 (20-Mar-2020)
将 /dev/webapp/webapp01 上的文件系统调整为 2621440 个块(每块 4k)。
/dev/webapp/webapp01 上的文件系统现在为 2621440 个块(每块 4k)。
# 第四步:缩减逻辑卷
[root@centos7 ~]# lvreduce -L 10G /dev/webapp/webapp01
WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce webapp/webapp01? [y/n]: `y`
Size of logical volume webapp/webapp01 changed from 30.00 GiB (7680 extents) to 10.00 GiB (2560 extents).
Logical volume webapp/webapp01 successfully resized.
# 第五步:挂载文件系统验证
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html
[root@centos7 ~]# df -h /var/www/html
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/webapp-webapp01 9.7G 36K 9.3G 1% /var/www/html
[root@centos7 ~]# ls /var/www/html
host.conf hostname hosts lost+found
补充说明: 如果文件系统是构建在磁盘分区上,扩展文件系统容量和缩减文件系统容量操作相同。
逻辑卷快照
我们可以使用快照记录了lv中数据,后续可以用来恢复数据。
# 创建快照:快照的容量不能小于lv容量
[root@centos7 ~]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01
Logical volume "webapp01-snap1" created.
# 挂载快照
[root@centos7 ~]# mount /dev/webapp/webapp01-snap1 /webapp/webapp01/
# 查看数据
[root@centos7 ~]# ls /webapp/webapp01/
host.conf hostname hosts hosts.allow hosts.deny
# 创建新数据
[root@centos7 ~]# echo hello world > /webapp/webapp01/hello.txt
[root@centos7 ~]# cat /webapp/webapp01/hello.txt
hello world
raid 逻辑卷
准备环境
[root@centos7 ~]# umount /webapp/webapp0
[root@centos7 ~]# umount /var/www/html
[root@centos7 ~]# lvremove /dev/webapp/webapp01*
创建 raid1 逻辑卷
[root@centos7 ~]# lvcreate --type raid1 -n webapp01 -L 15G webapp
[root@centos7 ~]# mkfs.xfs /dev/webapp/webapp01
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html/
[root@centos7 ~]# cp /etc/ho* /var/www/html/
模拟故障
[root@centos7 ~]# dd if=/dev/zero of=/dev/sdd bs=1M count=256
此时文件系统仍可以正方访问
[root@centos7 ~]# ls /var/www/html/
host.conf hostname hosts hosts.allow hosts.deny
[root@centos7 ~]# umount /var/www/html
[root@centos7 ~]# mount /dev/webapp/webapp01 /var/www/html/
修复raid
# 删除丢失的物理卷
[root@centos7 ~]# vgreduce --removemissing webapp --force
# 扩容回来
[root@centos7 ~]# vgextend webapp /dev/sdd
# 修复raid1 逻辑卷
[root@centos7 ~]# lvconvert --repair /dev/webapp/webapp01
# 扫描物理卷变化
[root@centos7 ~]# pvscan
# 验证结果
[root@centos7 ~]# pvs|grep webap
/dev/sdb webapp lvm2 a-- <20.00g 4.99g
/dev/sdc webapp lvm2 a-- <20.00g 4.99g
/dev/sdd webapp lvm2 a-- <20.00g <20.00g
其他示例:创建 raid5 逻辑卷
# Create a RAID5 LV with a usable size of 5GiB, 3 stripes, a stripe size of 64KiB, using a total of 4 devices (including one for parity).
lvcreate --type raid5 -L 5G -i 3 -I 64 -n mylv vg00