LVM磁盘管理实操:从裸盘分区到挂载全流程
发布时间:2026/10/21 5:03:19 锦皓数字建站

磁盘格式化和LVM挂载这组操作我一年不知道要做多少回。新服务器接盘、数据库目录扩容、日志单独分盘、老机器数据迁移几乎都会走一遍这套流程。很多教程喜欢把LVM讲得很宏大虚拟化存储、跨盘聚合、动态伸缩听着确实高大上但真上手的时候不少人连第一步fdisk分区都没搞明白或者mkfs之后挂载老失败更别提fstab写错导致开机进不了系统这种事了。这篇文章我就从实际运维的视角把“一块裸盘从分区到LVM卷挂载到服务器”的完整链路彻底拆一遍。会讲清楚LVM的层级关系、为什么推荐用它而不是直接格式化分区、动手前的选型和容量规划、每一步命令的敲法以及那些常规文档里不会写的坑。无论你是刚接触Linux的运维新人、自己玩服务器的开发者还是已经被PV/VG/LV绕晕的老朋友照着这篇操作基本都能搞定。1. 先搞清楚为什么需要LVM而不是直接格式化分区挂载1.1 传统分区的痛点和LVM的出发点LVMLogical Volume Manager逻辑卷管理解决的说白了就是传统分区方案太死板的问题。一块磁盘分完区之后分区边界基本就固定了后面想扩容只能看运气。比如一块500G的数据盘分区sdb1用了400G剩下100G虽然在同一个物理盘上但因为在分区边界之外你是没法直接并进sdb1的。想扩容就得先把数据导出去、删掉分区重划、再把数据导回来中间还得停机数据量一大根本没法搞。LVM改变了这个模式。它把物理磁盘的容量先收进一个“池子”里这个池子叫卷组VG然后再从池子里动态切割出逻辑卷LV。池子里只要有剩余空间LV就能随时扩大不需要停机也不需要搬数据。打个比方传统分区像一个人钱包里装了几张固定面额的卡想买更贵的东西只能换卡LVM则是一个共享的大账户里面有钱就能随时刷。所以对于服务器上的数据盘尤其是数据库数据目录、文件存储、日志分区这类容量增长难以预估的场景用LVM管理是Linux环境下的主流做法。系统盘看情况很多发行版安装时默认也用了LVM为的就是以后根分区不够了能在线扩。1.2 LVM的核心概念PV、VG、LV一条链路说清楚很多教程把LVM讲得像玄学实际上层级关系非常简单从下到上一条线PVPhysical Volume物理卷被LVM标记过的磁盘或分区相当于原材料。你可以对整块盘做PV也可以对一个分区做PV。VGVolume Group卷组多个PV合在一起形成的一个大容量池相当于把几个仓库合并成一个总仓。VG是LVM的管理核心扩容、跨盘都在这一层实现。LVLogical Volume逻辑卷从VG这个大池子里划出来的一段空间格式化之后就能挂载使用相当于从总仓里分出的具体货架用户最终看到的是这个。还有一个概念叫PEPhysical Extent物理扩展块是VG划分空间的最小单位。创建VG时可以指定PE大小默认是4MB。PE大小决定了空间分配的粒度也会影响后面扩容时的一些表现具体怎么选我在2.4节细说。操作链路归纳起来就是一句话硬盘 - PV - VG - LV - mkfs - mount。核心命令也就那么几条pvcreate、vgcreate、lvcreate、mkfs、mount。理解了这条链路后面每一步都是在往这条链路上挂节点。2. 实操前的规划与选型这几步不能省2.1 先认盘lsblk、fdisk -l和序列号核对动手之前先确认你要操作的是哪块盘。这一步看似多余但服务器上盘多的时候最容易翻车。我个人的习惯是先跑lsblk看全局结构lsblk输出类似这样NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda1 8:1 0 500M 0 part /boot ├─sda2 8:2 0 99.5G 0 part │ └─centos-root 253:0 0 99.5G 0 lvm / └─sda3 8:3 0 365.8G 0 part sdb 8:16 0 931.5G 0 disk这里sda是系统盘sdb是刚接上来的数据盘没有分区、没有挂载点就是一块裸盘。再配合fdisk -l看底层信息确认容量和盘符对得上。重点提醒格式化前一定要核对盘符和磁盘序列号用下面命令把序列号打出来lsblk -o NAME,SERIAL,MODEL,SIZE如果云服务器上有数据盘系统盘的设备名通常是vda数据盘是vdb但也不绝对。最怕的就是把系统盘当成数据盘给格式化了我见过有同事因此把整台机器搞挂的数据全没了只能从备份恢复。所以这个核对步骤再重复都不为过。2.2 分区表选择MBR还是GPT2TB是分水岭新盘要先建立分区表常见的有两种MBR和GPT。MBR是传统分区表格式最大只能寻址2TB的容量超过2TB的部分即使划分了分区也认不出来。GPT是新一代分区表支持超大容量盘也是目前新机器默认的选择。选型上其实很简单磁盘容量超过2TB必须用GPT否则空间会白白浪费即便容量小于2TB我也建议直接用GPT。现在新服务器几乎没有老主板的兼容性顾虑GPT在Linux下成熟稳定不需要为了所谓“兼容性”去选MBR。用parted创建GPT分区表parted /dev/sdb mklabel gpt如果你习惯用fdisk进去之后输入g也等于把分区表切成GPT。之后一切正常操作即可。2.3 文件系统选择ext4、xfs还是其他格式化文件系统这一步的选型直接影响后续运维。我说一下现在最常用的几种ext4兼容性最好几乎所有Linux发行版都能读写支持在线扩容resize2fs数据量中等时非常稳定可靠。尤其适合需要经常操作文件、情况复杂多样的通用场景。xfsRHEL、CentOS、以及它们的新世代替代品默认的文件系统处理大文件、超高并发写放大场景表现好。但xfs的缩容能力很差基本可以说没法缩扩容也只能挂在已挂载状态下用xfs_growfs做。btrfs、zfs这类高级文件系统功能确实很多快照、压缩、校验都有但对运维水平要求高常规服务器上用得少踩坑了不好排查。我的建议很简单没有特殊要求、之前没在机器上部署任何特殊应用就选ext4简单稳妥跑大数据量、并发写高的业务比如数据库日志盘、大规模文件存储选xfs。另外文件系统一旦格式化、数据写入之后再想更换类型就得搬数据重来所以这一步最好在项目规划初期就定下来。2.4 PE大小和容量规划动手前先算明白创建VG时可以指定PE大小默认4MB。它决定了空间分配的最小粒度。举个例子一个1TB的VGPE设为4MB那么空间就是按4MB的块来划分的如果PE设为16MB划分粒度变小但管理的大块数量更少对大量小文件的场景可能有轻微影响。实际生产环境中磁盘数量几十块以内默认的4MB完全够用不需要为了“性能”去调大PE反而调大了会让空间分配不够精细。容量规划要稍微算一下。假设你有一块2TB的盘要建VG计划划分两个LV一个给数据库用800G一个给日志用600G那么VG剩余600G暂时不分配留着以后哪个先不够就扩哪个。这种预留策略比一开始把空间全分光科学得多毕竟你最清楚哪些业务增长快。还有一个点经常被忽略如果VG由多块物理盘组成LV可以跨盘分布意味着数据会分散在多块物理盘上任何一块物理盘出故障整个VG的数据都有风险。所以生产环境的数据盘如果单块盘足够大我一般不把多块盘并成一个VG来跑核心数据除非你有硬件RAID兜底否则跨盘VG的故障影响面远大于单盘分区。3. 完整实操从裸盘到LVM挂载全流程3.1 分区并打上LVM标记假设目标盘是/dev/sdb第一步分区。用fdisk的典型流程fdisk /dev/sdb进入交互界面后依次输入n新建分区p主分区分区号1默认即可起始扇区直接回车使用默认值结束扇区直接回车使用整块盘t修改分区类型输入8e对应Linux LVMw保存退出这里要解释一下我平时建议先分区再建PV而不是直接把整块盘pvcreate。原因有两个一是分区后的设备名更清晰比如sdb1、sdb2一眼能看出哪块盘上分了几个区二是万一后续要调整分区边界或者配合其他工具分区格式更通用。整块盘直接建PV虽然省一步但很多管理工具和同事的认知习惯都会默认“先分区后PV”跟主流保持一致能少解释很多。分完区用lsblk验证一下应该能看到sdb1这个分区。3.2 创建PV并验证分区有了接着把它初始化为物理卷pvcreate /dev/sdb1没有任何报错的话用pvs查看pvs输出里会出现一行PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 a-- 931.51G 931.51G这时候PV列出来了VG字段还是空的说明它还没有归属任何卷组。另外可以用pvdisplay查看详细物理卷信息包括PE大小和起始位置。对性能敏感的场景可以通过pvdisplay确认PE起始地址是否对齐到1MB边界现代fdisk分区默认对齐普通场景不用纠结但如果用了老工具或者手动指定过扇区还是看一眼比较稳妥。3.3 创建VG并规划命名接着把PV加入卷组名字我建议带业务含义比如vg_data、vg_log、vg_backup而不是用vg0这种通用名。服务器多了以后看到vg_backup就明白它的用途省去翻文档的时间。vgcreate vg_data /dev/sdb1如果要指定PE大小在这条命令里加参数vgcreate -s 4M vg_data /dev/sdb1用vgs查看卷组信息vgsVG #PV #LV #SN Attr VSize VFree vg_data 1 0 0 wz--n- 931.51G 931.51GVFree是931.51G说明VG建好了、空间全都空着。3.4 创建LV从VG里切出逻辑卷。比如给数据目录划100Glvcreate -L 100G -n lv_data vg_data如果想把VG所有剩余空间都给这个LV可以用百分比写法lvcreate -l 100%FREE -n lv_data vg_data这里注意区分两个参数-L指定具体容量-l指定PE数量或百分比。创建完成后逻辑卷的设备路径就是/dev/vg_data/lv_data这个路径就是后面挂载用的源。用lvs看一下lvsLV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv_data vg_data -wi-a----- 100.00g3.5 格式化文件系统对LV格式化文件系统。创建ext4mkfs.ext4 /dev/vg_data/lv_data创建xfsmkfs.xfs /dev/vg_data/lv_data格式化这一步没有任何回退余地卷里的数据会被全部清空。我实际操作中mkfs之前一定会先执行一次lvs或者ls -l /dev/vg_data/确认设备路径和容量都正确再敲回车。尤其是在生产环境哪怕多花一分钟做确认也比事后恢复数据划算得多。另外顺手把文件系统错误检查也做了ext4可以用e2fsck不过格式化之后一般没问题直接挂载即可。3.6 挂载与fstab自动挂载一切就绪创建挂载点并挂载mkdir -p /data mount /dev/vg_data/lv_data /data执行df -h确认df -h /data最后别忘了开机自动挂载也就是配置/etc/fstab。强烈建议用UUID而不是设备路径因为设备路径可能因为重启后盘序变化而改变。查UUIDblkid /dev/vg_data/lv_data/dev/vg_data/lv_data: UUID3f1b0d4b-6b06-4c4f-9f2a-1a4c6a9f0e99 TYPEext4然后把下面这行追加到/etc/fstabUUID3f1b0d4b-6b06-4c4f-9f2a-1a4c6a9f0e99 /data ext4 defaults 0 2这行的字段含义分别是设备标识、挂载点、文件系统类型、挂载参数、是否dump备份、fsck检查顺序。数据盘的检查顺序建议是2系统根目录是1其他设备用2即可。写完立刻验证mount -a没有报错才算配置成功。这一步绝对不能偷懒否则重启后fstab有问题系统会进入紧急模式。4. 常见问题与排查技巧实录4.1 挂载失败UUID不存在的典型场景照着教程写完fstab执行mount -a结果报错UUIDxxxx doesnt exist。这种问题多半是blkid输出的UUID复制不全或者卷被重格式化过、UUID变了而fstab里还留着旧值。排查思路很简单先用blkid重新查当前UUID对比fstab里的值把正确的复制进去再mount -a验证。另外注意编辑fstab时别破坏格式字段之间用空格或Tab分隔都行但要保持一致不能混用到没法解析。我习惯用vim打开后用可视模式核对整行内容尤其注意行尾有没有隐藏字符。4.2 扩容后空间“消失”了怎么排查LVM最大的卖点就是扩容方便。比如lv_data现在100GVG里还剩50G想扩到120Glvextend -L 20G /dev/vg_data/lv_data但注意这一步只扩展了逻辑卷层文件系统并不会自动变大。ext4要接着执行resize2fs /dev/vg_data/lv_dataxfs要执行xfs_growfs /data很多新手只做lvextend就以为完事了df -h一看容量没变就以为是命令没生效其实是没理解逻辑卷和文件系统是两层结构。逻辑卷这层空间已经加上了但文件系统还没感知到必须用对应的命令去通知它。顺带提一句ext4的resize2fs既可以在线扩也可以缩小虽然有风险一般不建议没事缩着玩xfs基本只能扩不能缩规划容量时心里要有数。4.3 fstab写错导致开机进不了系统这是最坑的一个问题。fstab写错重启时系统挂载失败大概率会卡在emergency mode直接进不了正常系统。真遇到了可以先输入root密码进入救援模式编辑fstab注释掉或修正那行错误配置然后重启。这个教训我记得很清楚有次在一台测试机上改了fstab没验证就重启结果就卡在启动界面虽然最后修好了但生产环境可开不起这种玩笑。所以再次强调那条原则改完fstab立刻执行mount -a验证然后才允许重启。另外fstab里有个配置项挂载参数可以加nofail如果出现挂载失败系统不会因为这一行而卡住而是跳过继续启动。比如云服务器上可有可无的数据盘可以写成UUIDxxxx /data ext4 defaults,nofail 0 2这样对负载均衡类的场景更安全。4.4 LVM整体删除与重做的正确顺序有时候需要把整个LVM移除重来比如磁盘重新规划。删除顺序和创建顺序必须反过来先卸载、再删LV、再删VG、最后删PV。umount /data lvremove /dev/vg_data/lv_data vgremove vg_data pvremove /dev/sdb1这几个步骤每一步都会询问是否确认看清楚设备名再输y。我建议在这之前先把fstab里对应行注释或删掉免得重启之后系统又去找一个已经不存在的逻辑卷。移除完成之后用pvs、vgs、lvs各查一遍确认没有任何残留。如果还想把分区表也清掉让磁盘变回彻底的裸盘可以执行wipefs -a /dev/sdb或者用dd往开头写零dd if/dev/zero of/dev/sdb bs1M count10这两条都会把磁盘前部的元数据清掉但同样确认盘符别弄错。4.5 快照功能免费的回滚保险LVM里还有个很实用的功能值得知道就是快照。在线对lv_data做一个只读快照用于备份或升级前回滚lvcreate -s -L 10G -n lv_data_snap /dev/vg_data/lv_data这条命令会创建一个10G的快照卷快照在生成那一刻保留了lv_data当时的完整数据状态之后对原逻辑卷的更改会原样记录而快照里的数据保持不变。做数据库升级或者大规模数据变更前用一个快照顶着出问题直接恢复比自己拷贝全量数据快太多。要注意的是快照的空间是独立的如果快照卷太小改动的数据量超过它的容量快照就会失效。所以快照卷要给足余量备份用完之后及时lvremove清理别让它长期占着空间。我在实际操作中的体会是LVM这套东西概念不难难的是养成流程习惯。认盘、规划、创建、挂载、验证每一步按顺序做基本不会出大问题反倒是一些“小细节”最容易在半夜把你叫起来比如fstab没验证、扩容忘刷新文件系统、删除顺序不对。如果你记不住别的那就记住这一条对系统做任何涉及设备路径、挂载、文件系统的变更都要先备份配置、再验证、再重启顺序乱了数据就悬了。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。