Linux 逻辑卷管理摘要本文详细介绍了 Linux 逻辑卷管理LVM的核心概念与完整操作流程。内容涵盖物理卷PV、卷组VG、逻辑卷LV的创建与管理以及卷组和逻辑卷的扩展与缩减操作。同时文章深入讲解了 XFS 和 EXT4 文件系统的在线/离线扩容与缩容方法并提供了逻辑卷快照创建与数据恢复、RAID 逻辑卷的创建与故障修复等高级功能的实战示例。通过丰富的命令行演示帮助读者系统掌握 LVM 的灵活存储管理技术。一、环境准备虚拟机添加3块20G硬盘sdb sdc sdd[rootserver ~15:08:16]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda8:00100G0disk ├─sda18:101G0part /boot └─sda28:2099G0part ├─centos-root253:0050G0lvm / ├─centos-swap253:103.9G0lvm[SWAP]└─centos-home253:2045.1G0lvm /home sdb8:16020G0disk sdc8:32020G0disk sdd8:48020G0disk二、逻辑卷基本管理1.硬盘分区管理方案缺点• 硬盘分区空间必须使用连续空间所以硬盘分区扩容很麻烦特别是要扩容的分区后没有空间。• 使用硬盘分区创建的文件系统不同跨多个硬盘受单个硬盘容量限制。• 如果硬盘损坏则文件系统中数据也会丢失。2.逻辑卷管理硬盘方案优点• 使用逻辑卷可以更加灵活地扩展和缩减文件系统空间。• 使用逻辑卷创建的文件系统可以跨多个硬盘适合创建超大容量文件系统。• 使用逻辑卷可以创建镜像卷保证数据的冗余性。即使单个硬盘损坏文件系统中数据也会丢失。• 使用逻辑卷还可以创建快照保留某一时刻数据就像虚拟机快照一样。3.逻辑卷基本概念LVM是 Logical Volume Manager(逻辑卷管理)的简写LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组形成一个存储池。管理员可以在卷组上任意创建逻辑卷并进一步在逻辑卷上创建文件系统。• 物理卷PV, Physical Volume是LVM的基本存储逻辑块通过块设备创建。块设备是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID)。与基本的物理存储介质如分区、磁盘等相比物理卷包含有和LVM相关的管理参数。• 卷组VG, Volume Group是一个逻辑的存储空间由一个或多个物理卷组成。• 逻辑卷LV, Logical Volume是从卷组中创建出来的一个逻辑空间。如果把一个卷组类比为一个逻辑硬盘那么逻辑卷则可以类比为一个硬盘分区所以也可以在逻辑卷之上创建文件系统。简单地说卷组由多个物理卷组成可以在卷组中创建多个逻辑卷对逻辑卷创建文件系统给用户使用。4.LVM管理基本流程创建物理卷创建卷组创建逻辑卷5.创建物理卷# 创建单个PV[rootserver ~15:08:50]# pvcreate /dev/sdbPhysical volume/dev/sdbsuccessfully created.# 此次创建多个PV[rootserver ~15:09:07]# pvcreate /dev/sd{c,d}Physical volume/dev/sdcsuccessfully created. Physical volume/dev/sddsuccessfully created.# 查看PV列表[rootserver ~15:09:18]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb lvm2 ---20.00g20.00g /dev/sdc lvm2 ---20.00g20.00g /dev/sdd lvm2 ---20.00g20.00g# 查看单个PV详细信息[rootserver ~15:09:22]# pvdisplay /dev/sdb/dev/sdbis a new physical volume of20.00 GiB--- NEW Physical volume --- PV Name /dev/sdb VG Name PV Size20.00GiB Allocatable NO PE Size0Total PE0Free PE0Allocated PE0PV UUID G67lfM-jSm2-C1lr-nlRc-2LUE-hDZJ-zD3Uwx5.创建卷组# 创建包涵单个PV的VG[rootserver ~15:09:42]# vgcreate webapp /dev/sdbVolume groupwebappsuccessfully created# 创建包涵多个PV的VG[rootserver ~15:10:06]# vgcreate dbapp /dev/sd{c,d}Volume groupdbappsuccessfully created[rootserver ~15:10:45]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb webapp lvm2 a--20.00g20.00g /dev/sdc dbapp lvm2 a--20.00g20.00g /dev/sdd dbapp lvm2 a--20.00g20.00g# 查看VG列表[rootserver ~15:10:52]# vgsVG#PV #LV #SN Attr VSize VFreecentos130wz--n-99.00g4.00m dbapp200wz--n-39.99g39.99g webapp100wz--n-20.00g20.00g# 查看单个VG详细信息[rootserver ~15:11:21]# vgdisplay dbapp--- Volume group --- VG Name dbapp System ID Format lvm2 Metadata Areas2Metadata Sequence No1VG Access read/write VG Status resizable MAX LV0Cur LV0Open LV0Max PV0Cur PV2Act PV2VG Size39.99GiB# PEPhysical Extend是PV的最小存储单元。# 在创建VG时可通过-s选项设置。PE Size4.00MiB Total PE10238Alloc PE / Size0/0Free PE / Size10238/39.99GiB VG UUID eoSny5-xSZc-HatS-EUVS-mLAK-qd3c-xg9LFO6.创建逻辑卷# 在卷组webapp中创建一个逻辑卷名称为webapp01大小为5G。[rootserver ~15:12:46]# lvcreate -n webapp01 -L 5G webappLogical volumewebapp01created.# 在卷组dbapp中创建一个跨硬盘逻辑卷名称为data01大小为25G。[rootserver ~15:12:57]# lvcreate -n data01 -L 25G dbappLogical volumedata01created.# 查看LV列表[rootserver ~15:13:17]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home centos -wi-ao----45.12g root centos -wi-ao----50.00g swap centos -wi-ao----3.88g data01 dbapp -wi-a-----25.00g webapp01 webapp -wi-a-----5.00g逻辑卷设备名支持以下三种格式• /dev/vname/lvame• /dev/mapper/vname-lvame• /dev/dm-N[rootserver ~15:13:23]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01lrwxrwxrwx1root root75月2115:13 /dev/dbapp/data01 -../dm-4 lrwxrwxrwx1root root75月2115:13 /dev/mapper/dbapp-data01 -../dm-4# 查看单个LV详细信息[rootserver ~15:13:52]# lvdisplay /dev/dbapp/data01--- Logical volume --- LV Path /dev/dbapp/data01 LV Name data01 VG Name dbapp LV UUID UTdQHy-Qp9N-NrbK-V6EE-aWNR-xS1W-oB64xm LV Write Access read/write LV Creation host,timeserver.lz.cloud,2026-05-2115:13:17 0800 LV Status available# open 0LV Size25.00GiB# LELogical Extend是LV的最小存储单元。# 通常一个LE对应于一个PE。Current LE6400Segments2Allocation inherit Read ahead sectors auto - currentlysetto8192Block device253:4# 可以看到物理卷/dev/sdc空间已使用完物理卷/dev/sdd空间已使用5G[rootserver ~15:14:32]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb webapp lvm2 a--20.00g15.00g /dev/sdc dbapp lvm2 a--20.00g0/dev/sdd dbapp lvm2 a--20.00g14.99g# 可以看到逻辑卷/dev/dbapp/data01空间横跨2个硬盘[rootserver ~15:15:08]# lsblk /dev/sd{b..d}NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb8:16020G0disk └─webapp-webapp01253:305G0lvm sdc8:32020G0disk └─dbapp-data01253:4025G0lvm sdd8:48020G0disk └─dbapp-data01253:4025G0lvm7.创建文件系统[rootserver ~15:15:30]# mkfs.xfs /dev/webapp/webapp01[rootserver ~15:55:45]# mount /dev/webapp/webapp01 /usr/share/nginx/html# 基于lvm的文件系统持久化挂载需要修改/etc/fstab文件。8.清理# 卸载文件系统[rootserver ~15:56:57]# umount /dev/webapp/webapp01# 删除LV[rootserver ~15:57:01]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01Do you really want to remove active logical volume webapp/webapp01?[y/n]: y Logical volumewebapp01successfully removed Do you really want to remove active logical volume dbapp/data01?[y/n]: y Logical volumedata01successfully removed# 删除VG[rootserver ~15:57:21]# vgremove webapp dbappVolume groupwebappsuccessfully removed Volume groupdbappsuccessfully removed# 删除PV[rootserver ~15:57:32]# pvremove /dev/sd{b..d}Labels on physical volume/dev/sdbsuccessfully wiped. Labels on physical volume/dev/sdcsuccessfully wiped. Labels on physical volume/dev/sddsuccessfully wiped.三、扩展和缩减卷组1.环境准备# 创建卷组[rootserver ~15:58:08]# vgcreate webapp /dev/sdbPhysical volume/dev/sdbsuccessfully created. Volume groupwebappsuccessfully created# 创建卷组的时候如果指定的块设备不是物理卷则会先将块设备创建为物理卷。# 创建逻辑卷[rootserver ~16:17:32]# lvcreate -n webapp01 -L 10G webappWARNING: xfs signature detected on /dev/webapp/webapp01 at offset0. Wipe it?[y/n]: y Wiping xfs signature on /dev/webapp/webapp01. Logical volumewebapp01created.2.扩展卷组如果卷组空间不足可以通过添加新的物理卷到卷组中以扩展卷组容量。[rootserver ~16:17:46]# vgextend webapp /dev/sd{c,d}Physical volume/dev/sdcsuccessfully created. Physical volume/dev/sddsuccessfully created. Volume groupwebappsuccessfully extended3.缩减卷组如果卷组空间中有多余的物理卷或者物理卷容量小需要更换则可以将物理卷从卷组中剔除。删除物理卷前确保物理卷不在使用中。# 查看物理卷使用状态[rootserver ~16:18:17]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb webapp lvm2 a--20.00g10.00g /dev/sdc webapp lvm2 a--20.00g20.00g /dev/sdd webapp lvm2 a--20.00g20.00g# 将物理卷/dev/sdb从卷组webapp中剔除则会报错[rootserver ~16:18:28]# vgreduce webapp /dev/sdbPhysical volume/dev/sdbstillinuse# 解决方法将物理卷/dev/sdb中数据移动到卷组中其他物理卷[rootserver ~16:18:53]# pvmove /dev/sdb# 或者移动到卷组中特定物理卷# pvmove /dev/sdb /dev/sdd# 查看物理卷使用状态[rootserver ~16:19:59]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb webapp lvm2 a--20.00g20.00g /dev/sdc webapp lvm2 a--20.00g10.00g /dev/sdd webapp lvm2 a--20.00g20.00g# 再次剔除成功[rootserver ~16:20:08]# vgreduce webapp /dev/sdbRemoved/dev/sdbfrom volume groupwebapp[rootserver ~16:20:45]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb lvm2 ---20.00g20.00g /dev/sdc webapp lvm2 a--20.00g10.00g /dev/sdd webapp lvm2 a--20.00g20.00g四、扩展和缩减逻辑卷1.扩展逻辑卷如果逻辑卷空间不足在卷组空间充足的情况下也可以扩展逻辑卷空间。# 逻辑卷增加2G空间[rootserver ~16:20:54]# lvextend -L 2G /dev/webapp/webapp01Size of logical volume webapp/webapp01 changed from10.00GiB(2560extents)to12.00GiB(3072extents). Logical volume webapp/webapp01 successfully resized.[rootserver ~16:21:14]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-a-----12.00g2.缩减逻辑卷如果逻辑卷空间充足希望将多余的空间缩减出来它用也可以缩减逻辑卷空间。[rootserver ~16:21:22]# lvreduce -L -2G /dev/webapp/webapp01WARNING: Reducing active logical volume to10.00GiB. 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 from12.00GiB(3072extents)to10.00GiB(2560extents). Logical volume webapp/webapp01 successfully resized.[rootserver ~16:21:34]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-a-----10.00g五、扩展和缩减文件系统1.扩展 XFS 文件系统XFS文件系统只支持扩展不支持缩减。环境准备格式化文件系统并创建数据[rootserver ~16:21:42]# mkfs.xfs /dev/webapp/webapp01[rootserver ~16:22:26]# mkdir /usr/share/nginx/html[rootserver ~16:22:39]# mount /dev/webapp/webapp01 /usr/share/nginx/html[rootserver ~16:23:08]# cp /etc/host* /usr/share/nginx/html[rootserver ~16:23:20]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny# 第一步扩展逻辑卷[rootserver ~16:23:32]# lvextend -L 15G /dev/webapp/webapp01Size of logical volume webapp/webapp01 changed from10.00GiB(2560extents)to15.00GiB(3840extents). Logical volume webapp/webapp01 successfully resized.[rootserver ~16:23:48]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----15.00g# 第二步扩展文件系统[rootserver ~16:23:57]# xfs_growfs /usr/share/nginx/html[rootserver ~16:24:08]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 15G 33M 15G1% /usr/share/nginx/html[rootserver ~16:24:23]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny# 块设备和文件系统一并扩展[rootserver ~16:24:32]# lvextend -rL 20G /dev/webapp/webapp01[rootserver ~16:25:35]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----20.00g[rootserver ~16:25:53]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 33M 20G1% /usr/share/nginx/html2.扩展 EXT4 文件系统EXT4文件系统即支持扩展也支持缩减。环境准备格式化文件系统并创建数据[rootserver ~16:26:07]# umount /usr/share/nginx/html[rootserver ~16:30:32]# mkfs.ext4 /dev/webapp/webapp01[rootserver ~16:30:48]# mount /dev/webapp/webapp01 /usr/share/nginx/html[rootserver ~16:31:13]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 45M 19G1% /usr/share/nginx/html[rootserver ~16:31:25]# cp /etc/host* /usr/share/nginx/html[rootserver ~16:31:42]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny lostfound# 第一步扩展逻辑卷[rootserver ~16:31:54]# lvextend -L 25G /dev/webapp/webapp01Size of logical volume webapp/webapp01 changed from20.00GiB(5120extents)to25.00GiB(6400extents). Logical volume webapp/webapp01 successfully resized.[rootserver ~16:32:07]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----25.00g# 第二步扩展文件系统[rootserver ~16:32:15]# resize2fs /dev/webapp/webapp01[rootserver ~16:32:27]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 25G 44M 24G1% /usr/share/nginx/html[rootserver ~16:32:35]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny lostfound# 块设备和文件系统一并扩展[rootserver ~16:32:47]# lvextend -rL 30G /dev/webapp/webapp01[rootserver ~16:33:06]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----30.00g[rootserver ~16:33:18]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 30G 44M 28G1% /usr/share/nginx/html3.缩减 EXT4 文件系统缩减EXT4文件系统注意事项• 不支持在线缩减必须卸载后缩减。• 缩减后的容量不能小于当前使用的容量。ext4 减容流程卸载文件系统e2fsck 文件系统缩减文件系统缩减 lv挂载测试具体操作如下# 第一步卸载文件系统[rootserver ~16:33:23]# umount /usr/share/nginx/html# 第二步检测文件系统[rootserver ~16:34:04]# e2fsck -f /dev/webapp/webapp01e2fsck1.42.9(28-Dec-2013)第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass4: Checking reference counts 第5步: 检查簇概要信息 /dev/webapp/webapp01:16/1966080 files(0.0% non-contiguous),167447/7864320 blocks# 第三步缩减文件系统[rootserver ~16:34:14]# resize2fs /dev/webapp/webapp01 10Gresize2fs1.42.9(28-Dec-2013)Resizing the filesystem on /dev/webapp/webapp01 to2621440(4k)blocks. The filesystem on /dev/webapp/webapp01 is now2621440blocks long.# 第四步缩减逻辑卷[rootserver ~16:34:29]# lvreduce -L 10G /dev/webapp/webapp01WARNING: Reducing active logical volume to10.00GiB. 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 from30.00GiB(7680extents)to10.00GiB(2560extents). Logical volume webapp/webapp01 successfully resized.# 第五步挂载文件系统验证[rootserver ~16:34:41]# mount /dev/webapp/webapp01 /usr/share/nginx/html[rootserver ~16:35:26]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp019.8G 37M9.2G1% /usr/share/nginx/html[rootserver ~16:35:37]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny lostfound补充说明如果文件系统是构建在磁盘分区上扩展文件系统容量和缩减文件系统容量操作相同。六、逻辑卷快照我们可以使用快照记录了lv中数据后续可以用来恢复数据。# 创建快照快照的容量不能小于lv容量[rootserver ~17:22:46]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01Logical volumewebapp01-snap1created.# 挂载快照[rootserver ~17:23:51]# mount /dev/webapp/webapp01-snap1 /webapp/webapp01/# 查看数据[rootserver ~17:26:47]# ls /webapp/webapp01/# 创建新数据[rootserver ~17:26:32]# echo hello world /webapp/webapp01/hello.txt[rootserver ~17:26:38]# cat /webapp/webapp01/hello.txthello world七、raid 逻辑卷准备环境[rootserver ~19:07:30]# umount /webapp/webapp0[rootserver ~19:09:21]# umount /usr/share/nginx/html[rootserver ~19:09:34]# lvremove /dev/webapp/webapp01*创建 raid1 逻辑卷[rootserver ~19:09:50]# lvcreate --type raid1 -n webapp01 -L 15G webapp[rootserver ~19:10:09]# mkfs.xfs /dev/webapp/webapp01[rootserver ~19:13:41]# mount /dev/webapp/webapp01 /usr/share/nginx/html/[rootserver ~19:16:38]# cp /etc/ho* /usr/share/nginx/html/模拟故障[rootserver ~19:16:59]# dd if/dev/zero of/dev/sdd bs1M count256此时文件系统仍可以正方访问[rootserver ~19:17:10]# ls /usr/share/nginx/html/host.confhostnamehosts hosts.allow hosts.deny[rootserver ~19:17:19]# umount /usr/share/nginx/html[rootserver ~19:17:32]# mount /dev/webapp/webapp01 /usr/share/nginx/html/修复raid# 删除丢失的物理卷[rootserver ~19:17:39]# vgreduce --removemissing webapp --force# 扩容回来[rootserver ~19:19:54]# vgextend webapp /dev/sdd# 修复raid1 逻辑卷[rootserver ~19:20:02]# lvconvert --repair /dev/webapp/webapp01# 扫描物理卷变化[rootserver ~19:20:11]# pvscan# 验证结果[rootserver ~19:20:17]# pvs|grep webap/dev/sdb webapp lvm2 a--20.00g4.99g /dev/sdc webapp lvm2 a--20.00g4.99g /dev/sdd webapp lvm2 a--20.00g20.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--typeraid5-L5G-i3-I64-nmylv vg00
Linux LVM 终极实战指南:从 PV/VG/LV 到动态扩容、快照恢复全流程
Linux 逻辑卷管理摘要本文详细介绍了 Linux 逻辑卷管理LVM的核心概念与完整操作流程。内容涵盖物理卷PV、卷组VG、逻辑卷LV的创建与管理以及卷组和逻辑卷的扩展与缩减操作。同时文章深入讲解了 XFS 和 EXT4 文件系统的在线/离线扩容与缩容方法并提供了逻辑卷快照创建与数据恢复、RAID 逻辑卷的创建与故障修复等高级功能的实战示例。通过丰富的命令行演示帮助读者系统掌握 LVM 的灵活存储管理技术。一、环境准备虚拟机添加3块20G硬盘sdb sdc sdd[rootserver ~15:08:16]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda8:00100G0disk ├─sda18:101G0part /boot └─sda28:2099G0part ├─centos-root253:0050G0lvm / ├─centos-swap253:103.9G0lvm[SWAP]└─centos-home253:2045.1G0lvm /home sdb8:16020G0disk sdc8:32020G0disk sdd8:48020G0disk二、逻辑卷基本管理1.硬盘分区管理方案缺点• 硬盘分区空间必须使用连续空间所以硬盘分区扩容很麻烦特别是要扩容的分区后没有空间。• 使用硬盘分区创建的文件系统不同跨多个硬盘受单个硬盘容量限制。• 如果硬盘损坏则文件系统中数据也会丢失。2.逻辑卷管理硬盘方案优点• 使用逻辑卷可以更加灵活地扩展和缩减文件系统空间。• 使用逻辑卷创建的文件系统可以跨多个硬盘适合创建超大容量文件系统。• 使用逻辑卷可以创建镜像卷保证数据的冗余性。即使单个硬盘损坏文件系统中数据也会丢失。• 使用逻辑卷还可以创建快照保留某一时刻数据就像虚拟机快照一样。3.逻辑卷基本概念LVM是 Logical Volume Manager(逻辑卷管理)的简写LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组形成一个存储池。管理员可以在卷组上任意创建逻辑卷并进一步在逻辑卷上创建文件系统。• 物理卷PV, Physical Volume是LVM的基本存储逻辑块通过块设备创建。块设备是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID)。与基本的物理存储介质如分区、磁盘等相比物理卷包含有和LVM相关的管理参数。• 卷组VG, Volume Group是一个逻辑的存储空间由一个或多个物理卷组成。• 逻辑卷LV, Logical Volume是从卷组中创建出来的一个逻辑空间。如果把一个卷组类比为一个逻辑硬盘那么逻辑卷则可以类比为一个硬盘分区所以也可以在逻辑卷之上创建文件系统。简单地说卷组由多个物理卷组成可以在卷组中创建多个逻辑卷对逻辑卷创建文件系统给用户使用。4.LVM管理基本流程创建物理卷创建卷组创建逻辑卷5.创建物理卷# 创建单个PV[rootserver ~15:08:50]# pvcreate /dev/sdbPhysical volume/dev/sdbsuccessfully created.# 此次创建多个PV[rootserver ~15:09:07]# pvcreate /dev/sd{c,d}Physical volume/dev/sdcsuccessfully created. Physical volume/dev/sddsuccessfully created.# 查看PV列表[rootserver ~15:09:18]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb lvm2 ---20.00g20.00g /dev/sdc lvm2 ---20.00g20.00g /dev/sdd lvm2 ---20.00g20.00g# 查看单个PV详细信息[rootserver ~15:09:22]# pvdisplay /dev/sdb/dev/sdbis a new physical volume of20.00 GiB--- NEW Physical volume --- PV Name /dev/sdb VG Name PV Size20.00GiB Allocatable NO PE Size0Total PE0Free PE0Allocated PE0PV UUID G67lfM-jSm2-C1lr-nlRc-2LUE-hDZJ-zD3Uwx5.创建卷组# 创建包涵单个PV的VG[rootserver ~15:09:42]# vgcreate webapp /dev/sdbVolume groupwebappsuccessfully created# 创建包涵多个PV的VG[rootserver ~15:10:06]# vgcreate dbapp /dev/sd{c,d}Volume groupdbappsuccessfully created[rootserver ~15:10:45]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb webapp lvm2 a--20.00g20.00g /dev/sdc dbapp lvm2 a--20.00g20.00g /dev/sdd dbapp lvm2 a--20.00g20.00g# 查看VG列表[rootserver ~15:10:52]# vgsVG#PV #LV #SN Attr VSize VFreecentos130wz--n-99.00g4.00m dbapp200wz--n-39.99g39.99g webapp100wz--n-20.00g20.00g# 查看单个VG详细信息[rootserver ~15:11:21]# vgdisplay dbapp--- Volume group --- VG Name dbapp System ID Format lvm2 Metadata Areas2Metadata Sequence No1VG Access read/write VG Status resizable MAX LV0Cur LV0Open LV0Max PV0Cur PV2Act PV2VG Size39.99GiB# PEPhysical Extend是PV的最小存储单元。# 在创建VG时可通过-s选项设置。PE Size4.00MiB Total PE10238Alloc PE / Size0/0Free PE / Size10238/39.99GiB VG UUID eoSny5-xSZc-HatS-EUVS-mLAK-qd3c-xg9LFO6.创建逻辑卷# 在卷组webapp中创建一个逻辑卷名称为webapp01大小为5G。[rootserver ~15:12:46]# lvcreate -n webapp01 -L 5G webappLogical volumewebapp01created.# 在卷组dbapp中创建一个跨硬盘逻辑卷名称为data01大小为25G。[rootserver ~15:12:57]# lvcreate -n data01 -L 25G dbappLogical volumedata01created.# 查看LV列表[rootserver ~15:13:17]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home centos -wi-ao----45.12g root centos -wi-ao----50.00g swap centos -wi-ao----3.88g data01 dbapp -wi-a-----25.00g webapp01 webapp -wi-a-----5.00g逻辑卷设备名支持以下三种格式• /dev/vname/lvame• /dev/mapper/vname-lvame• /dev/dm-N[rootserver ~15:13:23]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01lrwxrwxrwx1root root75月2115:13 /dev/dbapp/data01 -../dm-4 lrwxrwxrwx1root root75月2115:13 /dev/mapper/dbapp-data01 -../dm-4# 查看单个LV详细信息[rootserver ~15:13:52]# lvdisplay /dev/dbapp/data01--- Logical volume --- LV Path /dev/dbapp/data01 LV Name data01 VG Name dbapp LV UUID UTdQHy-Qp9N-NrbK-V6EE-aWNR-xS1W-oB64xm LV Write Access read/write LV Creation host,timeserver.lz.cloud,2026-05-2115:13:17 0800 LV Status available# open 0LV Size25.00GiB# LELogical Extend是LV的最小存储单元。# 通常一个LE对应于一个PE。Current LE6400Segments2Allocation inherit Read ahead sectors auto - currentlysetto8192Block device253:4# 可以看到物理卷/dev/sdc空间已使用完物理卷/dev/sdd空间已使用5G[rootserver ~15:14:32]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb webapp lvm2 a--20.00g15.00g /dev/sdc dbapp lvm2 a--20.00g0/dev/sdd dbapp lvm2 a--20.00g14.99g# 可以看到逻辑卷/dev/dbapp/data01空间横跨2个硬盘[rootserver ~15:15:08]# lsblk /dev/sd{b..d}NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb8:16020G0disk └─webapp-webapp01253:305G0lvm sdc8:32020G0disk └─dbapp-data01253:4025G0lvm sdd8:48020G0disk └─dbapp-data01253:4025G0lvm7.创建文件系统[rootserver ~15:15:30]# mkfs.xfs /dev/webapp/webapp01[rootserver ~15:55:45]# mount /dev/webapp/webapp01 /usr/share/nginx/html# 基于lvm的文件系统持久化挂载需要修改/etc/fstab文件。8.清理# 卸载文件系统[rootserver ~15:56:57]# umount /dev/webapp/webapp01# 删除LV[rootserver ~15:57:01]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01Do you really want to remove active logical volume webapp/webapp01?[y/n]: y Logical volumewebapp01successfully removed Do you really want to remove active logical volume dbapp/data01?[y/n]: y Logical volumedata01successfully removed# 删除VG[rootserver ~15:57:21]# vgremove webapp dbappVolume groupwebappsuccessfully removed Volume groupdbappsuccessfully removed# 删除PV[rootserver ~15:57:32]# pvremove /dev/sd{b..d}Labels on physical volume/dev/sdbsuccessfully wiped. Labels on physical volume/dev/sdcsuccessfully wiped. Labels on physical volume/dev/sddsuccessfully wiped.三、扩展和缩减卷组1.环境准备# 创建卷组[rootserver ~15:58:08]# vgcreate webapp /dev/sdbPhysical volume/dev/sdbsuccessfully created. Volume groupwebappsuccessfully created# 创建卷组的时候如果指定的块设备不是物理卷则会先将块设备创建为物理卷。# 创建逻辑卷[rootserver ~16:17:32]# lvcreate -n webapp01 -L 10G webappWARNING: xfs signature detected on /dev/webapp/webapp01 at offset0. Wipe it?[y/n]: y Wiping xfs signature on /dev/webapp/webapp01. Logical volumewebapp01created.2.扩展卷组如果卷组空间不足可以通过添加新的物理卷到卷组中以扩展卷组容量。[rootserver ~16:17:46]# vgextend webapp /dev/sd{c,d}Physical volume/dev/sdcsuccessfully created. Physical volume/dev/sddsuccessfully created. Volume groupwebappsuccessfully extended3.缩减卷组如果卷组空间中有多余的物理卷或者物理卷容量小需要更换则可以将物理卷从卷组中剔除。删除物理卷前确保物理卷不在使用中。# 查看物理卷使用状态[rootserver ~16:18:17]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb webapp lvm2 a--20.00g10.00g /dev/sdc webapp lvm2 a--20.00g20.00g /dev/sdd webapp lvm2 a--20.00g20.00g# 将物理卷/dev/sdb从卷组webapp中剔除则会报错[rootserver ~16:18:28]# vgreduce webapp /dev/sdbPhysical volume/dev/sdbstillinuse# 解决方法将物理卷/dev/sdb中数据移动到卷组中其他物理卷[rootserver ~16:18:53]# pvmove /dev/sdb# 或者移动到卷组中特定物理卷# pvmove /dev/sdb /dev/sdd# 查看物理卷使用状态[rootserver ~16:19:59]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb webapp lvm2 a--20.00g20.00g /dev/sdc webapp lvm2 a--20.00g10.00g /dev/sdd webapp lvm2 a--20.00g20.00g# 再次剔除成功[rootserver ~16:20:08]# vgreduce webapp /dev/sdbRemoved/dev/sdbfrom volume groupwebapp[rootserver ~16:20:45]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--99.00g4.00m /dev/sdb lvm2 ---20.00g20.00g /dev/sdc webapp lvm2 a--20.00g10.00g /dev/sdd webapp lvm2 a--20.00g20.00g四、扩展和缩减逻辑卷1.扩展逻辑卷如果逻辑卷空间不足在卷组空间充足的情况下也可以扩展逻辑卷空间。# 逻辑卷增加2G空间[rootserver ~16:20:54]# lvextend -L 2G /dev/webapp/webapp01Size of logical volume webapp/webapp01 changed from10.00GiB(2560extents)to12.00GiB(3072extents). Logical volume webapp/webapp01 successfully resized.[rootserver ~16:21:14]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-a-----12.00g2.缩减逻辑卷如果逻辑卷空间充足希望将多余的空间缩减出来它用也可以缩减逻辑卷空间。[rootserver ~16:21:22]# lvreduce -L -2G /dev/webapp/webapp01WARNING: Reducing active logical volume to10.00GiB. 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 from12.00GiB(3072extents)to10.00GiB(2560extents). Logical volume webapp/webapp01 successfully resized.[rootserver ~16:21:34]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-a-----10.00g五、扩展和缩减文件系统1.扩展 XFS 文件系统XFS文件系统只支持扩展不支持缩减。环境准备格式化文件系统并创建数据[rootserver ~16:21:42]# mkfs.xfs /dev/webapp/webapp01[rootserver ~16:22:26]# mkdir /usr/share/nginx/html[rootserver ~16:22:39]# mount /dev/webapp/webapp01 /usr/share/nginx/html[rootserver ~16:23:08]# cp /etc/host* /usr/share/nginx/html[rootserver ~16:23:20]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny# 第一步扩展逻辑卷[rootserver ~16:23:32]# lvextend -L 15G /dev/webapp/webapp01Size of logical volume webapp/webapp01 changed from10.00GiB(2560extents)to15.00GiB(3840extents). Logical volume webapp/webapp01 successfully resized.[rootserver ~16:23:48]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----15.00g# 第二步扩展文件系统[rootserver ~16:23:57]# xfs_growfs /usr/share/nginx/html[rootserver ~16:24:08]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 15G 33M 15G1% /usr/share/nginx/html[rootserver ~16:24:23]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny# 块设备和文件系统一并扩展[rootserver ~16:24:32]# lvextend -rL 20G /dev/webapp/webapp01[rootserver ~16:25:35]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----20.00g[rootserver ~16:25:53]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 33M 20G1% /usr/share/nginx/html2.扩展 EXT4 文件系统EXT4文件系统即支持扩展也支持缩减。环境准备格式化文件系统并创建数据[rootserver ~16:26:07]# umount /usr/share/nginx/html[rootserver ~16:30:32]# mkfs.ext4 /dev/webapp/webapp01[rootserver ~16:30:48]# mount /dev/webapp/webapp01 /usr/share/nginx/html[rootserver ~16:31:13]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 45M 19G1% /usr/share/nginx/html[rootserver ~16:31:25]# cp /etc/host* /usr/share/nginx/html[rootserver ~16:31:42]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny lostfound# 第一步扩展逻辑卷[rootserver ~16:31:54]# lvextend -L 25G /dev/webapp/webapp01Size of logical volume webapp/webapp01 changed from20.00GiB(5120extents)to25.00GiB(6400extents). Logical volume webapp/webapp01 successfully resized.[rootserver ~16:32:07]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----25.00g# 第二步扩展文件系统[rootserver ~16:32:15]# resize2fs /dev/webapp/webapp01[rootserver ~16:32:27]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 25G 44M 24G1% /usr/share/nginx/html[rootserver ~16:32:35]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny lostfound# 块设备和文件系统一并扩展[rootserver ~16:32:47]# lvextend -rL 30G /dev/webapp/webapp01[rootserver ~16:33:06]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----30.00g[rootserver ~16:33:18]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 30G 44M 28G1% /usr/share/nginx/html3.缩减 EXT4 文件系统缩减EXT4文件系统注意事项• 不支持在线缩减必须卸载后缩减。• 缩减后的容量不能小于当前使用的容量。ext4 减容流程卸载文件系统e2fsck 文件系统缩减文件系统缩减 lv挂载测试具体操作如下# 第一步卸载文件系统[rootserver ~16:33:23]# umount /usr/share/nginx/html# 第二步检测文件系统[rootserver ~16:34:04]# e2fsck -f /dev/webapp/webapp01e2fsck1.42.9(28-Dec-2013)第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass4: Checking reference counts 第5步: 检查簇概要信息 /dev/webapp/webapp01:16/1966080 files(0.0% non-contiguous),167447/7864320 blocks# 第三步缩减文件系统[rootserver ~16:34:14]# resize2fs /dev/webapp/webapp01 10Gresize2fs1.42.9(28-Dec-2013)Resizing the filesystem on /dev/webapp/webapp01 to2621440(4k)blocks. The filesystem on /dev/webapp/webapp01 is now2621440blocks long.# 第四步缩减逻辑卷[rootserver ~16:34:29]# lvreduce -L 10G /dev/webapp/webapp01WARNING: Reducing active logical volume to10.00GiB. 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 from30.00GiB(7680extents)to10.00GiB(2560extents). Logical volume webapp/webapp01 successfully resized.# 第五步挂载文件系统验证[rootserver ~16:34:41]# mount /dev/webapp/webapp01 /usr/share/nginx/html[rootserver ~16:35:26]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp019.8G 37M9.2G1% /usr/share/nginx/html[rootserver ~16:35:37]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny lostfound补充说明如果文件系统是构建在磁盘分区上扩展文件系统容量和缩减文件系统容量操作相同。六、逻辑卷快照我们可以使用快照记录了lv中数据后续可以用来恢复数据。# 创建快照快照的容量不能小于lv容量[rootserver ~17:22:46]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01Logical volumewebapp01-snap1created.# 挂载快照[rootserver ~17:23:51]# mount /dev/webapp/webapp01-snap1 /webapp/webapp01/# 查看数据[rootserver ~17:26:47]# ls /webapp/webapp01/# 创建新数据[rootserver ~17:26:32]# echo hello world /webapp/webapp01/hello.txt[rootserver ~17:26:38]# cat /webapp/webapp01/hello.txthello world七、raid 逻辑卷准备环境[rootserver ~19:07:30]# umount /webapp/webapp0[rootserver ~19:09:21]# umount /usr/share/nginx/html[rootserver ~19:09:34]# lvremove /dev/webapp/webapp01*创建 raid1 逻辑卷[rootserver ~19:09:50]# lvcreate --type raid1 -n webapp01 -L 15G webapp[rootserver ~19:10:09]# mkfs.xfs /dev/webapp/webapp01[rootserver ~19:13:41]# mount /dev/webapp/webapp01 /usr/share/nginx/html/[rootserver ~19:16:38]# cp /etc/ho* /usr/share/nginx/html/模拟故障[rootserver ~19:16:59]# dd if/dev/zero of/dev/sdd bs1M count256此时文件系统仍可以正方访问[rootserver ~19:17:10]# ls /usr/share/nginx/html/host.confhostnamehosts hosts.allow hosts.deny[rootserver ~19:17:19]# umount /usr/share/nginx/html[rootserver ~19:17:32]# mount /dev/webapp/webapp01 /usr/share/nginx/html/修复raid# 删除丢失的物理卷[rootserver ~19:17:39]# vgreduce --removemissing webapp --force# 扩容回来[rootserver ~19:19:54]# vgextend webapp /dev/sdd# 修复raid1 逻辑卷[rootserver ~19:20:02]# lvconvert --repair /dev/webapp/webapp01# 扫描物理卷变化[rootserver ~19:20:11]# pvscan# 验证结果[rootserver ~19:20:17]# pvs|grep webap/dev/sdb webapp lvm2 a--20.00g4.99g /dev/sdc webapp lvm2 a--20.00g4.99g /dev/sdd webapp lvm2 a--20.00g20.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--typeraid5-L5G-i3-I64-nmylv vg00