行业资讯

硬盘分区分少了不用慌!LVM 在线扩容拯救服务器磁盘爆满

发布时间:2026/8/3 0:59:15
硬盘分区分少了不用慌!LVM 在线扩容拯救服务器磁盘爆满 Linux 逻辑卷管理环境准备虚拟机添加3块20G硬盘sdb sdc sdd[rootcentos7 ~]# lsblk /dev/sd{b..d}NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb8:16020G0disk sdc8:32020G0disk sdd8:48020G0disk逻辑卷基本管理硬盘分区管理方案缺点硬盘分区空间必须使用连续空间所以硬盘分区扩容很麻烦特别是要扩容的分区后没有空间。使用硬盘分区创建的文件系统不同跨多个硬盘受单个硬盘容量限制。如果硬盘损坏则文件系统中数据也会丢失。逻辑卷管理硬盘方案优点使用逻辑卷可以更加灵活地扩展和缩减文件系统空间。使用逻辑卷创建的文件系统可以跨多个硬盘适合创建超大容量文件系统。使用逻辑卷可以创建镜像卷保证数据的冗余性。即使单个硬盘损坏文件系统中数据也会丢失。使用逻辑卷还可以创建快照保留某一时刻数据就像虚拟机快照一样。逻辑卷基本概念LVM是 Logical Volume Manager(逻辑卷管理)的简写LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组形成一个存储池。管理员可以在卷组上任意创建逻辑卷并进一步在逻辑卷上创建文件系统。物理卷PV, Physical Volume是LVM的基本存储逻辑块通过块设备创建。块设备是指磁盘、磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID)。与基本的物理存储介质如分区、磁盘等相比物理卷包含有和LVM相关的管理参数。卷组VG, Volume Group是一个逻辑的存储空间由一个或多个物理卷组成。逻辑卷LV, Logical Volume是从卷组中创建出来的一个逻辑空间。如果把一个卷组类比为一个逻辑硬盘那么逻辑卷则可以类比为一个硬盘分区所以也可以在逻辑卷之上创建文件系统。简单地说卷组由多个物理卷组成可以在卷组中创建多个逻辑卷对逻辑卷创建文件系统给用户使用。LVM管理基本流程创建物理卷创建卷组创建逻辑卷创建物理卷# 创建单个PV[rootserver ~15:51:45]# pvcreate /dev/sdbPhysical volume/dev/sdbsuccessfully created.# 此次创建多个PV[rootserver ~15:59:29]# pvcreate /dev/sdc /dev/sddPhysical volume/dev/sdcsuccessfully created. Physical volume/dev/sddsuccessfully created.# 查看PV列表[rootserver ~16:00:04]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--199.00g4.00m /dev/sdb lvm2 ---20.00g20.00g /dev/sdc lvm2 ---20.00g20.00g /dev/sdd lvm2 ---20.00g20.00g# 查看单个PV详细信息[rootserver ~16:01:27]# 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 T13Kv1-CR1m-o6UD-v0aF-lhqP-8tom-RaXQ4c创建卷组# 创建包涵单个PV的VG[rootserver ~16:02:52]# vgcreate webapp /dev/sdbVolume groupwebappsuccessfully created# 创建包涵多个PV的VG[rootserver ~16:08:31]# vgcreate dbapp /dev/sd[c,d]Volume groupdbappsuccessfully created[rootserver ~16:09:18]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--199.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 ~16:09:10]# vgsVG#PV #LV #SN Attr VSize VFreecentos130wz--n-199.00g4.00m dbapp200wz--n-39.99g39.99g webapp100wz--n-20.00g20.00g# 查看单个VG详细信息[rootserver ~16:13:41]# 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 pZJI20-rpqu-PfU1-CiQL-DvXn-1SaF-hvezvY创建逻辑卷# 在卷组webapp中创建一个逻辑卷名称为webapp01大小为5G。[rootserver ~16:14:04]# lvcreate -n webapp01 -L 5G webappLogical volumewebapp01created.# 在卷组dbapp中创建一个跨硬盘逻辑卷名称为data01大小为25G。[rootserver ~16:16:10]# lvcreate -n data01 -L 25G dbappLogical volumedata01created.# 查看LV列表[rootserver ~16:16:51]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home centos -wi-ao----145.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 ~16:17:10]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01lrwxrwxrwx.1root root77月3116:16 /dev/dbapp/data01 -../dm-4 lrwxrwxrwx.1root root77月3116:16 /dev/mapper/dbapp-data01 -../dm-4# 查看单个LV详细信息[rootserver ~16:17:50]# lvdisplay /dev/dbapp/data01--- Logical volume --- LV Path /dev/dbapp/data01 LV Name data01 VG Name dbapp LV UUID q2hciq-1Thw-GGzu-oiaE-6Y64-6say-2WMmhi LV Write Access read/write LV Creation host,timeserver.cyw,2026-07-3116:16:47 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 ~16:18:33]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--199.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 ~16:19:20]# 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:4025G0lvm创建文件系统[rootserver ~16:19:51]# mkfs.xfs /dev/webapp/webapp01meta-data/dev/webapp/webapp01isize512agcount4,agsize327680blkssectsz512attr2,projid32bit1crc1finobt0,sparse0databsize4096blocks1310720,imaxpct25sunit0swidth0blks namingversion2bsize4096ascii-ci0ftype1loginternal logbsize4096blocks2560,version2sectsz512sunit0blks, lazy-count1realtimenoneextsz4096blocks0,rtextents0[rootserver ~16:20:21]# mount /dev/webapp/webapp01 /usr/share/nginx/html# 基于lvm的文件系统持久化挂载需要修改/etc/fstab文件清理# 卸载文件系统[rootserver ~16:36:54]# umount /dev/webapp/webapp01# 删除LV[rootserver ~16:37:50]# 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 ~16:38:37]# vgremove webapp dbappVolume groupwebappsuccessfully removed Volume groupdbappsuccessfully removed# 删除PV[rootserver ~16:39:04]# 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.扩展和缩减卷组环境准备# 创建卷组[rootserver ~16:39:27]# vgcreate webapp /dev/sdbPhysical volume/dev/sdbsuccessfully created. Volume groupwebappsuccessfully created# 创建卷组的时候如果指定的块设备不是物理卷则会先将块设备创建为物理卷。# 创建逻辑卷[rootserver ~16:40:22]# lvcreate -n webapp01 -L 10G webappLogical volumewebapp01created.扩展卷组如果卷组空间不足可以通过添加新的物理卷到卷组中以扩展卷组容量。[rootserver ~16:43:46]# vgextend webapp /dev/sd{c,d}Physical volume/dev/sdcsuccessfully created. Physical volume/dev/sddsuccessfully created. Volume groupwebappsuccessfully extended[rootserver ~16:44:44]# vgsVG#PV #LV #SN Attr VSize VFreecentos130wz--n-199.00g4.00m webapp310wz--n-59.99g49.99g缩减卷组如果卷组空间中有多余的物理卷或者物理卷容量小需要更换则可以将物理卷从卷组中剔除。删除物理卷前确保物理卷不在使用中。# 查看物理卷使用状态[rootserver ~16:47:58]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--199.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 ~17:04:42]# vgreduce webapp /dev/sdbPhysical volume/dev/sdbstillinuse# 解决方法将物理卷/dev/sdb中数据移动到卷组中其他物理卷[rootserver ~17:05:28]# pvmove /dev/sdb #会顺延到sdc# 或者移动到卷组中特定物理卷/dev/sdb: Moved:1.29% /dev/sdb: Moved:100.00%# 查看物理卷使用状态[rootserver ~17:06:53]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--199.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 ~17:07:21]# vgreduce webapp /dev/sdbRemoved/dev/sdbfrom volume groupwebapp[rootserver ~17:07:42]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--199.00g4.00m /dev/sdb lvm2 ---20.00g20.00g /dev/sdc webapp lvm2 a--20.00g10.00g /dev/sdd webapp lvm2 a--20.00g20.00g扩展和缩减逻辑卷扩展逻辑卷如果逻辑卷空间不足在卷组空间充足的情况下也可以扩展逻辑卷空间。# 逻辑卷增加2G空间[rootserver ~17:08:02]# 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 ~17:08:41]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-a-----12.00g缩减逻辑卷如果逻辑卷空间充足希望将多余的空间缩减出来它用也可以缩减逻辑卷空间。[rootserver ~17:08:56]# 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 ~17:09:44]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-a-----10.00g扩展和缩减文件系统扩展 XFS 文件系统XFS文件系统只支持扩展不支持缩减。环境准备格式化文件系统并创建数据[rootserver ~17:09:54]# mkfs.xfs /dev/webapp/webapp01meta-data/dev/webapp/webapp01isize512agcount4,agsize655360blkssectsz512attr2,projid32bit1crc1finobt0,sparse0databsize4096blocks2621440,imaxpct25sunit0swidth0blks namingversion2bsize4096ascii-ci0ftype1loginternal logbsize4096blocks2560,version2sectsz512sunit0blks, lazy-count1realtimenoneextsz4096blocks0,rtextents0[rootserver ~17:10:41]# mkdir -p /usr/share/nginx/html[rootserver ~17:11:30]# mount /dev/webapp/webapp01 /usr/share/nginx/html[rootserver ~17:11:50]# cp /etc/host* /usr/share/nginx/html[rootserver ~17:12:15]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny[rootserver ~17:12:26]## 第一步扩展逻辑卷[rootserver ~17:12: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 ~17:13:01]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----15.00g# 第二步扩展文件系统[rootserver ~17:14:09]# xfs_growfs /usr/share/nginx/htmlmeta-data/dev/mapper/webapp-webapp01isize512agcount4,agsize655360blkssectsz512attr2,projid32bit1crc1finobt0spinodes0databsize4096blocks2621440,imaxpct25sunit0swidth0blks namingversion2bsize4096ascii-ci0ftype1loginternalbsize4096blocks2560,version2sectsz512sunit0blks, lazy-count1realtimenoneextsz4096blocks0,rtextents0data blocks changed from2621440to3932160[rootserver ~17:14:35]# df -h /usr/share/nginx/html/文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 15G 33M 15G1% /usr/share/nginx/html[rootserver ~17:14:53]# ls /usr/share/nginx/html/host.confhostnamehosts hosts.allow hosts.deny# 块设备和文件系统一并扩展[rootserver ~17:15:07]# lvextend -rL 20G /dev/webapp/webapp01Size of logical volume webapp/webapp01 changed from15.00GiB(3840extents)to20.00GiB(5120extents). Logical volume webapp/webapp01 successfully resized. meta-data/dev/mapper/webapp-webapp01isize512agcount6,agsize655360blkssectsz512attr2,projid32bit1crc1finobt0spinodes0databsize4096blocks3932160,imaxpct25sunit0swidth0blks namingversion2bsize4096ascii-ci0ftype1loginternalbsize4096blocks2560,version2sectsz512sunit0blks, lazy-count1realtimenoneextsz4096blocks0,rtextents0data blocks changed from3932160to5242880[rootserver ~17:16:37]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----20.00g[rootserver ~17:17:13]# df -h /usr/share/nginx/html/文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 33M 20G1% /usr/share/nginx/html扩展 EXT4 文件系统EXT4文件系统即支持扩展也支持缩减。环境准备格式化文件系统并创建数据[rootserver ~17:17:48]# umount /usr/share/nginx/html[rootserver ~17:18:58]# mkfs.ext4 /dev/webapp/webapp01mke2fs1.42.9(28-Dec-2013)文件系统标签OS type: Linux 块大小4096(log2)分块大小4096(log2)Stride0blocks, Stripewidth0blocks1638400inodes,6553600blocks327680blocks(5.00%)reservedforthe super user 第一个数据块0Maximum filesystemblocks2155872256200blockgroups32768blocks per group,32768fragments per group8192inodes per group Superblock backups stored on blocks:32768,98304,163840,229376,294912,819200,884736,1605632,2654208,4096000Allocating group tables: 完成 正在写入inode表: 完成 Creating journal(32768blocks): 完成 Writing superblocks and filesystem accounting information: 完成[rootserver ~17:19:15]# mount /dev/webapp/webapp01 /usr/share/nginx/html[rootserver ~17:19:40]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 33M 20G1% /usr/share/nginx/html[rootserver ~17:19:52]# cp /etc/host* /usr/share/nginx/html[rootserver ~17:20:33]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny# 第一步扩展逻辑卷[rootserver ~17:20:47]# 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 ~17:21:51]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----25.00g# 第二步扩展文件系统[rootserver ~17:28:11]# resize2fs /dev/webapp/webapp01[rootserver ~17:28:39]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 25G 45M 24G1% /usr/share/nginx/html缩减 EXT4 文件系统缩减EXT4文件系统注意事项不支持在线缩减必须卸载后缩减。缩减后的容量不能小于当前使用的容量。ext4 减容流程卸载文件系统e2fsck 文件系统缩减文件系统缩减 lv挂载测试具体操作如下# 第一步卸载文件系统[rootserver ~21:24:19]# umount /usr/share/nginx/html# 第二步检测文件系统[rootserver ~21:24:43]# e2fsck -f /dev/webapp/webapp01e2fsck1.42.9(28-Dec-2013)/dev/webapp/webapp01: 正在修复日志 第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass4: Checking reference counts 第5步: 检查簇概要信息 Free 块s count wrong(6406707,counted6406702). 处理y? 是 Free inodes count wrong(1638389,counted1638384). 处理y? 是 /dev/webapp/webapp01: ***** 文件系统已修改 ***** /dev/webapp/webapp01:16/1638400 files(0.0% non-contiguous),146898/6553600 blocks# 第三步缩减文件系统[rootserver ~21:25:19]# 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 ~21:25:57]# 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 from25.00GiB(6400extents)to10.00GiB(2560extents). Logical volume webapp/webapp01 successfully resized.[rootserver ~21:26:26]## 第五步挂载文件系统验证[rootserver ~21:26:29]# mount /dev/webapp/webapp01 /usr/share/nginx/html[rootserver ~21:26:58]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp019.8G 37M9.2G1% /usr/share/nginx/html[rootserver ~21:27:09]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny lostfound补充说明如果文件系统是构建在磁盘分区上扩展文件系统容量和缩减文件系统容量操作相同。