硬盘分区分少了不用慌!LVM 在线扩容拯救服务器磁盘爆满
📅 2026/8/3 1:02:44
👁️ 阅读次数
📝 编程学习
Linux 逻辑卷管理
环境准备
虚拟机添加3块20G硬盘,sdb sdc sdd
[root@centos7 ~]# 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[root@server ~15:51:45]# pvcreate /dev/sdbPhysical volume"/dev/sdb"successfully created.# 此次创建多个PV[root@server ~15:59:29]# pvcreate /dev/sdc /dev/sddPhysical volume"/dev/sdc"successfully created. Physical volume"/dev/sdd"successfully created.# 查看PV列表[root@server ~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详细信息[root@server ~16:01:27]# pvdisplay /dev/sdb"/dev/sdb"is a new physical volume of"20.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[root@server ~16:02:52]# vgcreate webapp /dev/sdbVolume group"webapp"successfully created# 创建包涵多个PV的VG[root@server ~16:08:31]# vgcreate dbapp /dev/sd[c,d]Volume group"dbapp"successfully created[root@server ~16:09:18]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--<199.00g4.00m /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@server ~16:09:10]# vgsVG#PV #LV #SN Attr VSize VFreecentos130wz--n-<199.00g4.00m dbapp200wz--n-39.99g39.99g webapp100wz--n-<20.00g<20.00g# 查看单个VG详细信息[root@server ~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# PE,Physical 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。[root@server ~16:14:04]# lvcreate -n webapp01 -L 5G webappLogical volume"webapp01"created.# 在卷组dbapp中创建一个跨硬盘逻辑卷:名称为data01,大小为25G。[root@server ~16:16:10]# lvcreate -n data01 -L 25G dbappLogical volume"data01"created.# 查看LV列表[root@server ~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
[root@server ~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详细信息[root@server ~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# LE,Logical Extend,是LV的最小存储单元。# 通常一个LE对应于一个PE。Current LE6400Segments2Allocation inherit Read ahead sectors auto - currentlysetto8192Block device253:4# 可以看到:物理卷/dev/sdc空间已使用完,物理卷/dev/sdd空间已使用5G[root@server ~16:18:33]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--<199.00g4.00m /dev/sdb webapp lvm2 a--<20.00g<15.00g /dev/sdc dbapp lvm2 a--<20.00g0/dev/sdd dbapp lvm2 a--<20.00g14.99g# 可以看到逻辑卷/dev/dbapp/data01空间横跨2个硬盘[root@server ~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创建文件系统
[root@server ~16:19:51]# mkfs.xfs /dev/webapp/webapp01meta-data=/dev/webapp/webapp01isize=512agcount=4,agsize=327680blks=sectsz=512attr=2,projid32bit=1=crc=1finobt=0,sparse=0data=bsize=4096blocks=1310720,imaxpct=25=sunit=0swidth=0blks naming=version2bsize=4096ascii-ci=0ftype=1log=internal logbsize=4096blocks=2560,version=2=sectsz=512sunit=0blks, lazy-count=1realtime=noneextsz=4096blocks=0,rtextents=0[root@server ~16:20:21]# mount /dev/webapp/webapp01 /usr/share/nginx/html# 基于lvm的文件系统持久化挂载,需要修改/etc/fstab文件清理
# 卸载文件系统[root@server ~16:36:54]# umount /dev/webapp/webapp01# 删除LV[root@server ~16:37:50]# lvremove /dev/webapp/webapp01 /dev/dbapp/data01Do 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@server ~16:38:37]# vgremove webapp dbappVolume group"webapp"successfully removed Volume group"dbapp"successfully removed# 删除PV[root@server ~16:39:04]# 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@server ~16:39:27]# vgcreate webapp /dev/sdbPhysical volume"/dev/sdb"successfully created. Volume group"webapp"successfully created# 创建卷组的时候,如果指定的块设备不是物理卷,则会先将块设备创建为物理卷。# 创建逻辑卷[root@server ~16:40:22]# lvcreate -n webapp01 -L 10G webappLogical volume"webapp01"created.扩展卷组
如果卷组空间不足,可以通过添加新的物理卷到卷组中,以扩展卷组容量。
[root@server ~16:43:46]# vgextend webapp /dev/sd{c,d}Physical volume"/dev/sdc"successfully created. Physical volume"/dev/sdd"successfully created. Volume group"webapp"successfully extended[root@server ~16:44:44]# vgsVG#PV #LV #SN Attr VSize VFreecentos130wz--n-<199.00g4.00m webapp310wz--n-<59.99g<49.99g缩减卷组
如果卷组空间中有多余的物理卷或者物理卷容量小需要更换,则可以将物理卷从卷组中剔除。
删除物理卷前确保物理卷不在使用中。
# 查看物理卷使用状态[root@server ~16:47:58]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--<199.00g4.00m /dev/sdb webapp lvm2 a--<20.00g<10.00g /dev/sdc webapp lvm2 a--<20.00g<20.00g /dev/sdd webapp lvm2 a--<20.00g<20.00g# 将物理卷/dev/sdb从卷组webapp中剔除,则会报错[root@server ~17:04:42]# vgreduce webapp /dev/sdbPhysical volume"/dev/sdb"stillinuse# 解决方法:将物理卷/dev/sdb中数据移动到卷组中其他物理卷[root@server ~17:05:28]# pvmove /dev/sdb #会顺延到sdc# 或者移动到卷组中特定物理卷/dev/sdb: Moved:1.29% /dev/sdb: Moved:100.00%# 查看物理卷使用状态[root@server ~17:06:53]# pvsPV VG Fmt Attr PSize PFree /dev/sda2 centos lvm2 a--<199.00g4.00m /dev/sdb webapp lvm2 a--<20.00g<20.00g /dev/sdc webapp lvm2 a--<20.00g<10.00g /dev/sdd webapp lvm2 a--<20.00g<20.00g# 再次剔除,成功[root@server ~17:07:21]# vgreduce webapp /dev/sdbRemoved"/dev/sdb"from volume group"webapp"[root@server ~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.00g<10.00g /dev/sdd webapp lvm2 a--<20.00g<20.00g扩展和缩减逻辑卷
扩展逻辑卷
如果逻辑卷空间不足,在卷组空间充足的情况下,也可以扩展逻辑卷空间。
# 逻辑卷增加2G空间[root@server ~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.[root@server ~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缩减逻辑卷
如果逻辑卷空间充足,希望将多余的空间缩减出来它用,也可以缩减逻辑卷空间。
[root@server ~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.[root@server ~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文件系统只支持扩展,不支持缩减。
环境准备:格式化文件系统,并创建数据
[root@server ~17:09:54]# mkfs.xfs /dev/webapp/webapp01meta-data=/dev/webapp/webapp01isize=512agcount=4,agsize=655360blks=sectsz=512attr=2,projid32bit=1=crc=1finobt=0,sparse=0data=bsize=4096blocks=2621440,imaxpct=25=sunit=0swidth=0blks naming=version2bsize=4096ascii-ci=0ftype=1log=internal logbsize=4096blocks=2560,version=2=sectsz=512sunit=0blks, lazy-count=1realtime=noneextsz=4096blocks=0,rtextents=0[root@server ~17:10:41]# mkdir -p /usr/share/nginx/html[root@server ~17:11:30]# mount /dev/webapp/webapp01 /usr/share/nginx/html[root@server ~17:11:50]# cp /etc/host* /usr/share/nginx/html[root@server ~17:12:15]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny[root@server ~17:12:26]## 第一步:扩展逻辑卷[root@server ~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.[root@server ~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# 第二步:扩展文件系统[root@server ~17:14:09]# xfs_growfs /usr/share/nginx/htmlmeta-data=/dev/mapper/webapp-webapp01isize=512agcount=4,agsize=655360blks=sectsz=512attr=2,projid32bit=1=crc=1finobt=0spinodes=0data=bsize=4096blocks=2621440,imaxpct=25=sunit=0swidth=0blks naming=version2bsize=4096ascii-ci=0ftype=1log=internalbsize=4096blocks=2560,version=2=sectsz=512sunit=0blks, lazy-count=1realtime=noneextsz=4096blocks=0,rtextents=0data blocks changed from2621440to3932160[root@server ~17:14:35]# df -h /usr/share/nginx/html/文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 15G 33M 15G1% /usr/share/nginx/html[root@server ~17:14:53]# ls /usr/share/nginx/html/host.confhostnamehosts hosts.allow hosts.deny# 块设备和文件系统一并扩展[root@server ~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-webapp01isize=512agcount=6,agsize=655360blks=sectsz=512attr=2,projid32bit=1=crc=1finobt=0spinodes=0data=bsize=4096blocks=3932160,imaxpct=25=sunit=0swidth=0blks naming=version2bsize=4096ascii-ci=0ftype=1log=internalbsize=4096blocks=2560,version=2=sectsz=512sunit=0blks, lazy-count=1realtime=noneextsz=4096blocks=0,rtextents=0data blocks changed from3932160to5242880[root@server ~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[root@server ~17:17:13]# df -h /usr/share/nginx/html/文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 33M 20G1% /usr/share/nginx/html扩展 EXT4 文件系统
EXT4文件系统即支持扩展,也支持缩减。
环境准备:格式化文件系统,并创建数据
[root@server ~17:17:48]# umount /usr/share/nginx/html[root@server ~17:18:58]# mkfs.ext4 /dev/webapp/webapp01mke2fs1.42.9(28-Dec-2013)文件系统标签=OS type: Linux 块大小=4096(log=2)分块大小=4096(log=2)Stride=0blocks, Stripewidth=0blocks1638400inodes,6553600blocks327680blocks(5.00%)reservedforthe super user 第一个数据块=0Maximum filesystemblocks=2155872256200blockgroups32768blocks 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: 完成[root@server ~17:19:15]# mount /dev/webapp/webapp01 /usr/share/nginx/html[root@server ~17:19:40]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 33M 20G1% /usr/share/nginx/html[root@server ~17:19:52]# cp /etc/host* /usr/share/nginx/html[root@server ~17:20:33]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny# 第一步:扩展逻辑卷[root@server ~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.[root@server ~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# 第二步:扩展文件系统[root@server ~17:28:11]# resize2fs /dev/webapp/webapp01[root@server ~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
- 挂载测试
具体操作如下:
# 第一步:卸载文件系统[root@server ~21:24:19]# umount /usr/share/nginx/html# 第二步:检测文件系统[root@server ~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,counted=6406702). 处理<y>? 是 Free inodes count wrong(1638389,counted=1638384). 处理<y>? 是 /dev/webapp/webapp01: ***** 文件系统已修改 ***** /dev/webapp/webapp01:16/1638400 files(0.0% non-contiguous),146898/6553600 blocks# 第三步:缩减文件系统[root@server ~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.# 第四步:缩减逻辑卷[root@server ~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.[root@server ~21:26:26]## 第五步:挂载文件系统验证[root@server ~21:26:29]# mount /dev/webapp/webapp01 /usr/share/nginx/html[root@server ~21:26:58]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp019.8G 37M9.2G1% /usr/share/nginx/html[root@server ~21:27:09]# ls /usr/share/nginx/htmlhost.confhostnamehosts hosts.allow hosts.deny lost+found补充说明:如果文件系统是构建在磁盘分区上,扩展文件系统容量和缩减文件系统容量操作相同。
编程学习
技术分享
实战经验