行业资讯
磁盘满了没法扩容?Linux LVM 逻辑卷全套实操,在线扩容不宕机
前言小白运维痛点直击有没有小伙伴踩过这些存储大坑服务器硬盘分区空间满了分区后面没有空余空间根本没法扩容业务被迫停机删文件多块 20G 硬盘想合并成 40G 大容量存储普通分区完全做不到想备份某个时刻磁盘数据又不想关机打虚拟机快照单块硬盘损坏直接丢全部业务数据无冗余方案传统固定分区存在致命缺陷而LVM 逻辑卷管理就是企业运维标准解决方案本篇全程小白友好先讲运维实际用途、完整实验思路所有命令逐行带详细注释、输出结果完整保留搭配大量对比表格、警示文本框零基础也能跟着实操落地。一、为什么要用 LVM传统分区 VS LVM 逻辑卷对比生产运维实际作用弹性扩容业务增长磁盘不够随时新增硬盘扩充容量无需重新分区重装系统多盘合并多块物理硬盘整合为一个大存储池突破单盘容量限制在线调整XFS 文件系统支持不停机扩容业务无中断数据快照瞬间备份卷内全部数据故障快速回滚RAID 冗余支持 raid1/raid5单盘损坏数据不丢失传统分区缺陷⚠️固定分区致命短板空间连续要求扩容必须分区后方有空闲空间磁盘规划错误就无法扩容不能跨硬盘一个文件系统只能在单块硬盘多硬盘无法合并使用无快照 / 冗余机制硬盘故障数据直接丢失LVM 逻辑卷优势✅LVM 核心优势存储池化多块硬盘统一做成资源池按需分配空间弹性伸缩随时加硬盘扩容支持在线扩容快照备份秒级创建数据快照用于数据备份、测试环境RAID 逻辑卷硬件无 RAID 卡也能实现磁盘冗余传统分区 vs LVM 对比表对比维度普通磁盘分区/dev/sda1LVM 逻辑卷扩容限制分区后方必须有空余空间无法跨硬盘可新增硬盘加入存储池无限扩容多硬盘合并不支持单文件系统只能存一块盘多 PV 合并 VG统一分配空间在线扩容多数场景需要停机XFS 支持不停机在线扩容数据快照无原生快照功能支持创建读写快照快速回滚磁盘冗余不支持内置 raid1/raid5 逻辑卷运维灵活性极差前期规划失误后期无解极高业务扩容零停机二、LVM 三大核心概念通俗拆解三层结构逻辑PV→VG→LVPV物理卷底层物理硬盘 / 分区给 LVM 做底层存储单元VG卷组多个 PV 合并成统一存储资源池LV逻辑卷从 VG 池中划分空间格式化挂载给业务使用三层概念通俗表格名词全称通俗理解对应设备示例PVPhysical Volume 物理卷一块块单独硬盘原材料/dev/sdb /dev/sdcVGVolume Group 卷组材料堆把所有硬盘合并成大仓库vg 名称 webapp、dbappLVLogical Volume 逻辑卷从仓库划出独立分区存放业务数据/dev/webapp/webapp01LVM 完整操作总流程准备空闲硬盘 → 2. pvcreate 创建 PV → 3. vgcreate 创建 VG 存储池 → 4. lvcreate 划分 LV → 5. mkfs 格式化 → 6. mount 挂载使用扩容场景新增硬盘→pvcreate→vgextend 扩容 VG→lvextend 扩容 LV→更新文件系统备份场景lvcreate -s 创建快照卷三、实验环境准备实验环境说明虚拟机新增 3 块 20G 空闲硬盘设备名称/dev/sdb/dev/sdc/dev/sdd# lsblk列出三块硬盘{b..d}批量匹配sdb sdc sdd# lsblk查看块设备树形工具# /dev/sd{b..d} shell批量简写一次性查看三块硬盘[rootcentos7 ~]# lsblk /dev/sd{b..d}NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb8:16020G0disk sdc8:32020G0disk sdd8:48020G0disk输出解读三块硬盘均为 20G 本地磁盘无分区、无挂载可全部用于 LVM 实验四、LVM 基础创建全套实操PV/VG/LV 创建、格式化挂载4.1 创建物理卷 PVpvcreate将裸硬盘 / 分区初始化为 LVM 物理卷写入 LVM 标识才能加入卷组# 单块硬盘创建PV# pvcreate初始化物理卷/dev/sdb 目标裸硬盘[rootcentos7 ~]# pvcreate /dev/sdbPhysical volume/dev/sdbsuccessfully created.# 批量多块硬盘创建PV{c,d}匹配sdc、sdd两块硬盘[rootcentos7 ~]# pvcreate /dev/sd{c,d}Physical volume/dev/sdcsuccessfully created. Physical volume/dev/sddsuccessfully created.查看所有物理卷 pvspvs精简输出 PV 列表快速查看 PV 归属 VG、剩余空闲空间[rootcentos7 ~]# pvsPV VG Fmt Attr PSize PFree /dev/sdb lvm2 ---20.00g20.00g /dev/sdc lvm2 ---20.00g20.00g /dev/sdd lvm2 ---20.00g20.00g输出字段解释表格字段含义PV物理卷设备名VG所属卷组空白代表未加入任何 VGFmt格式 lvm2CentOS7 默认 LVM 格式Attr属性— 代表未加入卷组PSize硬盘总容量PFree硬盘剩余空闲空间查看单块 PV 详细信息 pvdisplaypvdisplay打印 PV 完整底层参数、UUID、PE 块信息# pvdisplay查看详细PV信息/dev/sdb 指定设备[rootcentos7 ~]# 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 MBHW0w-OkJL-CasO-PYRR-sduS-U2m5-zdkQ5d关键字段解释PE物理最小存储单元创建 VG 时指定默认 4M未加入 VG 则 PE Size 为 04.2 创建卷组 VGvgcreate将 1 个或多个 PV 合并为统一存储池卷组示例 1单硬盘创建 VG webapp业务网站存储池# vgcreate 卷组名 物理卷设备# webapp自定义卷组名称/dev/sdb 作为底层PV[rootcentos7 ~]# vgcreate webapp /dev/sdbVolume groupwebappsuccessfully created示例 2两块硬盘合并创建 dbapp 数据库存储池# /dev/sd{c,d} 两块20G硬盘合并成40G存储池dbapp[rootcentos7 ~]# vgcreate dbapp /dev/sd{c,d}Volume groupdbappsuccessfully created查看 VG 列表 vgsvgs精简展示所有卷组 PV 数量、LV 数量、总容量、空闲容量[rootcentos7 ~]# pvsPV VG Fmt Attr PSize PFree /dev/sdb webapp lvm2 a--20.00g20.00g /dev/sdc dbapp lvm2 a--20.00g20.00g /dev/sdd dbapp lvm2 a--20.00g20.00g[rootcentos7 ~]# vgsVG#PV #LV #SN Attr VSize VFreedbapp200wz--n-39.99g39.99g webapp100wz--n-20.00g20.00gvgs 字段说明表字段含义VG卷组名称#PV该卷组包含几块物理硬盘#LV已创建逻辑卷数量VSize卷组总容量VFree卷组剩余空闲空间查看 VG 详细信息 vgdisplay# vgdisplay 卷组名输出PE大小、总PE、空闲PE[rootcentos7 ~]# 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 Size4.00MiB# PE最小存储块默认4MTotal PE10238Alloc PE / Size0/0Free PE / Size10238/39.99GiB VG UUID kjY26m-D0ax-WmMq-fMJv-1Tnb-imqh-GOAWkG4.3 创建逻辑卷 LVlvcreate从 VG 空闲空间划分逻辑卷参数说明文本框lvcreate 核心参数-n指定逻辑卷名称-L指定逻辑卷总容量支持 G/M末尾参数卷组名称示例 1webapp 卷组创建 5G 网站逻辑卷 webapp01# -n webapp01 逻辑卷名称-L 5G 分配5G空间webapp 来源卷组[rootcentos7 ~]# lvcreate -n webapp01 -L 5G webappLogical volumewebapp01created.示例 2dbapp 双硬盘卷组创建 25G 跨盘数据库卷 data01# 两块20G硬盘合并池划出25G逻辑卷自动跨两块硬盘存储[rootcentos7 ~]# lvcreate -n data01 -L 25G dbappLogical volumedata01created.查看逻辑卷 lvs[rootcentos7 ~]# lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert data01 dbapp -wi-a-----25.00g webapp01 webapp -wi-a-----5.00g逻辑卷三种访问路径说明# 三种等价设备路径全部指向同一个逻辑卷[rootcentos7 ~]# ls -l /dev/dbapp/data01 /dev/mapper/dbapp-data01lrwxrwxrwx1root root76月1718:26 /dev/dbapp/data01 -../dm-4 lrwxrwxrwx1root root76月1718:26 /dev/mapper/dbapp-data01 -../dm-4/dev/VG 名 / LV 名最直观推荐日常使用/dev/mapper/VG-LV系统底层映射文件/dev/dm-N内核原始设备号运维极少使用lvdisplay 查看 LV 完整信息[rootcentos7 ~]# lvdisplay /dev/dbapp/data01--- Logical volume --- LV Path /dev/dbapp/data01 LV Name data01 VG Name dbapp LV UUID W8UafB-A7RJ-dBjM-bsA2-8Obc-p8gE-bMZgmm LV Write Access read/write LV Creation host,timecentos7.linux.com,2022-12-2611:42:40 0800 LV Status available# open 0LV Size25.00GiB Current LE6400Segments2# 2个物理段代表跨两块硬盘存储Allocation inherit Read ahead sectors auto - currentlysetto8192Block device253:4Segments2代表该 25G 逻辑卷同时占用 sdc、sdd 两块硬盘完美实现跨盘存储验证 PV 空间占用[rootcentos7 ~]# pvsPV VG Fmt Attr PSize PFree /dev/sdb webapp lvm2 a--20.00g15.00g /dev/sdc dbapp lvm2 a--20.00g0# sdc全部用完/dev/sdd dbapp lvm2 a--20.00g14.99g# sdd剩余15Glsblk 树形查看跨盘结构[rootcentos7 ~]# 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清晰看到 data01 横跨 sdc、sdd 两块物理磁盘4.4 格式化逻辑卷并挂载# mkfs.xfs将逻辑卷格式化为XFS文件系统CentOS7默认仅支持扩容[rootcentos7 ~]# mkfs.xfs /dev/webapp/webapp01# mount挂载逻辑卷到网站根目录# /usr/share/nginx/html Nginx网页存放目录[rootcentos7 ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html持久化开机自动挂载修改 /etc/fstab 写入 LV 的 UUID服务器重启自动挂载4.5 LVM 全套清理实验复原完整销毁流程卸载 → 删除 LV → 删除 VG → 删除 PV# umount 卸载挂载点不卸载无法删除LV[rootcentos7 ~]# umount /dev/webapp/webapp01# lvremove 删除逻辑卷交互输入y确认删除[rootcentos7 ~]# 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# vgremove 删除卷组[rootcentos7 ~]# vgremove webapp dbappVolume groupwebappsuccessfully removed Volume groupdbappsuccessfully removed# pvremove 擦除硬盘LVM标识恢复普通裸硬盘[rootcentos7 ~]# 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.五、卷组 VG 扩容与缩减实操5.1 扩容卷组 vgextend业务增长VG 空间不足新增硬盘加入存储池# 先创建单盘VG webapp[rootcentos7 ~]# pvcreate /dev/sdb[rootcentos7 ~]# vgcreate webapp /dev/sdb[rootcentos7 ~]# lvcreate -n webapp01 -L 10G webapp# vgextend将sdc、sdd两块硬盘加入webapp卷组扩容VG总容量[rootcentos7 ~]# vgextend webapp /dev/sd{c,d}Physical volume/dev/sdcsuccessfully created. Physical volume/dev/sddsuccessfully created. Volume groupwebappsuccessfully extended5.2 缩减卷组 vgreduce核心前置⚠️警示文本⚠️缩减 VG 前提要移除的 PV 上无任何数据占用否则命令直接报错若 PV 存有数据必须先用 pvmove 把数据迁移到同 VG 其他硬盘再剔除 PV完整缩容流程# 查看PV占用状态[rootcentos7 ~]# pvsPV VG Fmt Attr PSize PFree /dev/sdb webapp lvm2 a--20.00g10.00g# 有数据占用无法直接剔除/dev/sdc webapp lvm2 a--20.00g20.00g /dev/sdd webapp lvm2 a--20.00g20.00g# pvmove /dev/sdb把sdb上全部数据迁移到VG内其他空闲硬盘[rootcentos7 ~]# pvmove /dev/sdb# 指定目标硬盘迁移pvmove /dev/sdb /dev/sdd[rootcentos7 ~]# pvmove /dev/sdb /dev/sdd/dev/sdb: Moved:0.51% /dev/sdb: Moved:100.00%# 迁移完成sdb无数据执行vgreduce移除PV[rootcentos7 ~]# vgreduce webapp /dev/sdbRemoved/dev/sdbfrom volume groupwebapp# 验证sdb已脱离卷组[rootcentos7 ~]# pvsPV VG Fmt Attr PSize PFree /dev/sdb lvm2 ---20.00g20.00g /dev/sdc webapp lvm2 a--20.00g20.00g /dev/sdd webapp lvm2 a--20.00g10.00g六、逻辑卷 LV 扩容、缩容6.1 扩容逻辑卷 lvextend方式 1增加指定容量2G 代表扩容 2G# -L 2G 在原有基础上加2G空间[rootcentos7 ~]# lvextend -L 2G /dev/webapp/webapp01Size of logical volume webapp/webapp01 changed from10.00GiB(2560extents)to12.00GiB(3072extents). Logical volume webapp/webapp01 successfully resized.[rootcentos7 ~]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-a-----12.00g6.2 缩减逻辑 lvreduce⚠️高危提示缩容会删除超出空间内数据生产严禁随意执行# -L -2G 减少2G容量交互输入y确认[rootcentos7 ~]# 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.[rootcentos7 ~]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-a-----10.00g七、文件系统扩容XFS/EXT4 区分7.1 XFS 文件系统CentOS7 默认仅支持扩容不可缩容两步扩容流程lvextend 扩容 LV → xfs_growfs 刷新文件系统# 1. 将LV扩容至15G[rootcentos7 ~]# lvextend -L 15G /dev/webapp/webapp01[rootcentos7 ~]# lvs /dev/webapp/webapp01LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert webapp01 webapp -wi-ao----15.00g# 2. xfs_growfs 在线刷新挂载点无需卸载[rootcentos7 ~]# xfs_growfs /usr/share/nginx/html[rootcentos7 ~]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 15G 140M 15G1% /usr/share/nginx/html一键合并扩容-r 自动同步文件系统# -r 参数扩容LV同时自动刷新文件系统简化操作[rootcentos7 ~]# lvextend -rL 20G /dev/webapp/webapp01[rootcentos7 ~]# df -h /usr/share/nginx/html文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/webapp-webapp01 20G 176M 20G1% /usr/share/nginx/html7.2 EXT4 文件系统支持扩容 缩容扩容操作[rootcentos7 ~]# lvextend -L 25G /dev/webapp/webapp01# resize2fs 刷新ext4文件系统[rootcentos7 ~]# resize2fs /dev/webapp/webapp01EXT4 缩容强制流程文本框EXT4 缩容四步硬性要求顺序不能乱umount 卸载文件系统不能在线缩容e2fsck -f 强制检测磁盘错误resize2fs 缩减文件系统容量lvreduce 缩减逻辑卷容量# 1 卸载[rootcentos7 ~]# umount /usr/share/nginx/html# 2 强制磁盘检测[rootcentos7 ~]# e2fsck -f /dev/webapp/webapp01# 3 文件系统缩至10G[rootcentos7 ~]# resize2fs /dev/webapp/webapp01 10G# 4 LV缩容[rootcentos7 ~]# lvreduce -L 10G /dev/webapp01# 5 重新挂载验证[rootcentos7 ~]# mount /usr/share/nginx/html八、LVM 快照数据备份神器快照作用瞬间复制逻辑卷当前全部数据用于升级、测试前备份故障一键恢复快照占用空间仅记录变更数据节省存储。创建快照命令参数-ssnapshot 创建快照卷-L 指定快照容量不小于源 LV 使用空间# 创建webapp01快照webapp01-snap1分配10G快照空间[rootcentos7 ~]# lvcreate -s -n webapp01-snap1 -L 10G /dev/webapp/webapp01Logical volumewebapp01-snap1created.# 挂载快照查看备份数据[rootcentos7 ~]# mount /dev/webapp/webapp01-snap1 /webapp/webapp01/九、LVM RAID1 冗余卷单盘不坏数据运维场景服务器无硬件 RAID 卡使用 LVM 软 RAID1 实现双盘镜像一块硬盘损坏数据不丢失# --type raid1 创建镜像逻辑卷[rootcentos7 ~]# lvcreate --type raid1 -n webapp01 -L 15G webapp[rootcentos7 ~]# mkfs.xfs /dev/webapp/webapp01[rootcentos7 ~]# mount /dev/webapp/webapp01 /usr/share/nginx/html/硬盘故障修复流程# 1 移除损坏硬盘[rootcentos7 ~]# vgreduce --removemissing webapp --force# 2 新增硬盘加入VG[rootcentos7 ~]# vgextend webapp /dev/sdd# 3 重建raid镜像[rootcentos7 ~]# lvconvert --repair /dev/webapp/webapp01十、全文运维速查表格LVM 全套命令汇总表操作目标命令核心作用初始化硬盘为 PVpvcreate /dev/sdb裸硬盘转为 LVM 物理卷查看 PVpvs / pvdisplay查看物理卷信息创建卷组vgcreate vg 名 /dev/sdb多 PV 合并存储池扩容 VGvgextend vg 名 /dev/sdc新增硬盘加入 VG缩减 VGpvmove vgreduce迁移数据后移除 PV创建逻辑卷lvcreate -n 名 -L 容量 VG划分业务存储卷扩容 LVlvextend /- 容量 设备扩大逻辑卷空间XFS 刷新扩容xfs_growfs 挂载点在线生效扩容EXT4 刷新resize2fs 设备ext 文件系统调整创建快照lvcreate -s -n 快照名数据瞬时备份创建 RAID1lvcreate --type raid1双盘数据镜像删除 LV/VG/PVlvremove/vgremove/pvremove销毁 LVM 结构
郑州网站建设
网页设计
企业官网