拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Linux生产环境RAID配置与LVM逻辑卷管理实战

前几篇笔记都在聊命令、权限、日志这一类日常运维的细节这篇我想把两块比较“硬核”的内容一次性讲透RAID配置与故障恢复以及LVM逻辑卷管理。为什么把这两块放一起因为生产环境里它们几乎总是同时出现RAID负责在磁盘硬件层面兜底LVM负责让容量管理不再僵化。很多刚接触服务器的朋友觉得这些东西离自己很远可真到线上机器亮红灯、数据盘空间又见底的时候就明白懂不懂RAID和LVM直接决定你能不能从容处理事故。这篇笔记以软RAID mdadm为主因为它在CentOS这类发行版里开箱即用适合练习和日常维护硬RAID的配置界面各有不同但底层原理是相通的。LVM部分会从PV、VG、LV三个概念一路讲到扩容、缩容以及大家经常搜的home目录扩容。内容尽量贴近实际操作命令可以直接复制到测试环境里验证。1. 为什么生产环境离不开RAID与LVM1.1 RAID能解决的三个实际问题先说一个最常见的场景一台服务器里装了三块机械盘其中一块突然报SMART错误过不了多久直接掉线。如果这块盘上没有做冗余保护系统可能还能跑一阵子但数据已经处于随时丢失的边缘。RAID的核心价值就是解决这种“单块磁盘可靠性不足”的问题。把多块盘组合成一个逻辑设备后即使其中一块盘故障只要阵列没有超过允许的坏盘数量数据依然可读可写。第二个问题是单盘性能瓶颈。一块7200转的机械盘顺序读写也就150MB/s到200MB/s左右随机IOPS更低。通过RAID把多块盘并行起来读写带宽能明显提升尤其是RAID 0、RAID 10这类条带化方案。虽然现在SSD性能已经很强但在大量使用HDD的存储服务器、备份服务器上RAID带来的聚合性能提升依然非常可观。第三个问题是容量扩展。单块盘的容量是固定的越用越不够。RAID可以把多块盘聚合成一个大卷比如三块2TB盘组成RAID 5可用容量大概4TB左右。之后再想扩大还可以做阵列扩容虽然过程比较谨慎但至少给了后续调整的空间。相比之下普通单盘或者传统的分区方案想在不丢数据的情况下扩大文件系统难度要大得多。1.2 LVM到底解决了什么痛点LVM解决的问题和RAID不同它管的是“分区和文件系统层面”的灵活性。传统方案中你给/home分了一个100GB的分区用着用着满了而这个分区所在的卷组上可能还有剩余空间却没法直接分给/home因为分区边界是固定的。LVM把磁盘或分区抽象成物理卷再把多个物理卷合并成卷组最后从卷组里切出逻辑卷给文件系统用。这样一来空间就像一个大水池哪里水位低了就调过去不用停机重做分区。LVM的另一个好处是支持快照虽然生产环境我一般不建议依赖它做备份但在某些升级、测试场景里逻辑卷快照还是能帮上不少忙。RAID和LVM组合使用的典型架构是硬件RAID卡先把多块磁盘做成一个阵列比如/dev/sda然后在这个阵列上创建LVM再分出/boot、/、/data等逻辑卷。这样既有了硬件级别的冗余又保留了容量灵活调整的能力。1.3 RAID和LVM不是一回事也不能互相替代有些新手会以为做了RAID就可以不用LVM或者做了LVM就可以不关心磁盘坏了。这完全是两码事。RAID关心的是“磁盘坏了数据怎么办”核心是冗余和性能LVM关心的是“分区满了怎么扩”核心是容量管理和灵活调整。如果一个系统只做RAID不规划LVM将来某个挂载点空间不够扩容依然麻烦如果只做LVM而不做任何磁盘冗余阵列里一块盘挂了整个逻辑卷的数据都可能受影响。实际运维中这两者常常配合使用而不是二选一。2. RAID选型与配置前准备2.1 硬RAID与软RAID怎么选硬RAID依赖独立阵列卡比如服务器上常见的PERC、SAS3108、华为SR系列。阵列卡有自己独立的处理器和缓存部分卡还带电池或电容保护系统断电时能把缓存里的数据刷到盘上。配置界面在开机自检阶段进入通常按CtrlR或CtrlC不同品牌略有区别。这种方案性能稳定不占用CPU而且阵列信息一般保存在卡上的RAID metadata里换到同型号卡上基本能直接识别。缺点是硬卡成本高阵列卡本身损坏也会影响阵列识别。软RAID就是利用操作系统自带的组件比如Linux下的mdadm。系统通过软件层把多块磁盘组合成阵列不需要额外硬件成本低、通用性强而且阵列信息记录在磁盘自身的metadata中整机迁移到另一台服务器上也能重新组装。缺点是会占用CPU、内存资源CPU负载高的时候对性能有一定影响。对于虚拟机、测试环境、对性能要求不高的业务软RAID完全够用生产环境如果条件允许我还是建议上硬RAID尤其是带电池或电容的阵列卡。2.2 RAID 0/1/5/10怎么选一张表看清楚很多文章会列一堆专业术语这里我用最直白的方式把常见级别拆开讲。RAID 0是条带化所有数据分散写到多块盘上性能最好但没有任何冗余任意一块盘坏整个阵列数据全丢。RAID 1是镜像两块盘存一模一样的数据写入时会写两份读性能有一定提升但可用容量只有总容量的一半。RAID 5至少需要三块盘数据和校验信息分布在所有盘上允许坏一块盘容量利用率是(n-1)/n。RAID 10是镜像加条带先成对镜像再在多个镜像组之间做条带性能和冗余都比较均衡但至少需要四块盘可用容量是总容量的一半。不同RAID级别的选择不能只看容量还要结合业务场景。数据库、虚拟化这类对IOPS和可靠性都敏感的场景RAID 10通常比RAID 5更稳大文件存储、视频归档这类顺序读写多、同时想兼顾容量利用率的场景RAID 5或RAID 6更合适。下面是常见级别的对比。RAID级别最少磁盘数可用容量冗余能力读性能写性能典型场景RAID 02全部容量无高高临时数据、强性能需求且可丢失RAID 1250%允许坏1块较好一般系统盘、关键小容量数据RAID 53(n-1)/n允许坏1块较好一般有校验开销文件存储、备份、视频RAID 10450%每组镜像坏1块高高数据库、虚拟化、核心业务2.3 配置前磁盘规划要点无论硬RAID还是软RAID配置前磁盘规划都很重要。首先尽量选用同一品牌、同一型号、容量一致的磁盘不同容量组合模式会比较麻烦RAID 5最终可用容量也会被最小盘限制。其次建议留一块热备盘或冷备盘盘坏后阵列可以自动或手动把备用盘加入重建缩短故障影响时间。还有就是注意确认磁盘上没有旧数据特别是有过软RAID或LVM历史的盘最好用mdadm --zero-superblock清掉旧metadata再做阵列否则创建时容易报一堆警告。3. 用mdadm完成软RAID5配置3.1 环境准备我在测试环境里用的是CentOS 7.9虚拟机加了三块20GB的虚拟磁盘系统安装在一块独立盘上。生产环境操作前建议先确认一下是否真的需要软RAID以及这几块盘没有处于挂载状态。用下面的命令可以快速查看磁盘情况lsblk fdisk -l cat /proc/mdstatcat /proc/mdstat这一步很关键如果系统里已经存在阵列比如/dev/md0说明之前配过要先确认用途。新加的磁盘一般会显示为/dev/sdb、/dev/sdc、/dev/sdd如果它们之前是普通分区盘创建阵列前要先清掉分区表和md元数据。我习惯用wipefs -a /dev/sdb这种命令逐块清理清完再用lsblk复查。3.2 创建RAID5并挂载确认三块盘都准备好了执行创建命令mdadm --create /dev/md0 --level5 --raid-devices3 /dev/sdb /dev/sdc /dev/sdd这里--level5代表RAID 5--raid-devices3指定三块盘参与/dev/md0是最终生成的阵列设备名。创建过程中屏幕上会提示是否继续输入y即可。实际操作中创建不会一瞬间完成系统需要在后台做初始化同步。查看进度用cat /proc/mdstat正常情况下会看到类似[.............] resync 23.5%的信息。这个同步过程的时间跟磁盘容量和IO能力有关20GB盘通常几分钟大容量盘可能要几小时。同步期间阵列其实已经可以用但建议等它完成后再正式上线因为刚开始性能不稳定。同步完成后格式化并挂载mkfs.xfs /dev/md0 mkdir -p /data mount /dev/md0 /data这里我用了xfs文件系统CentOS 7以上系统默认也推荐xfs。如果你想用ext4用mkfs.ext4 /dev/md0即可。挂载后可以df -hT /data确认容量三块20GB盘做RAID 5实际可用空间约40GB符合(n-1)/n的预期。3.3 配置持久化与开机自动挂载软RAID最怕重启后设备名对不上。为了让它开机自动组装需要把阵列信息写入配置文件mdadm --detail --scan /etc/mdadm.conf如果文件里已经有内容推荐先备份再追加避免重复配置导致冲突。然后编辑/etc/fstab把挂载信息写进去。这里建议用UUID而不是设备名因为重启后设备名可能因盘序变化而变动。先查UUIDblkid /dev/md0输出类似UUIDxxxx-xxxx TYPExfs然后在/etc/fstab里加一行UUIDxxxx-xxxx /data xfs defaults 0 0写完可以用mount -a做一次验证检查无误后再重启测试。这一步偷懒的话下次重启很可能卡在等待阵列出现或者挂载失败甚至直接进系统后/data是空的。4. RAID故障恢复实战4.1 模拟坏盘RAID的好处只有在坏盘时才能体现所以强烈建议在测试环境做几次故障演练不要等到生产环境真的出问题再手忙脚乱。软RAID里模拟磁盘故障很简单mdadm --manage /dev/md0 --fail /dev/sdb执行后马上查看状态mdadm --detail /dev/md0 cat /proc/mdstat此时会看到/dev/sdb的状态变成faulty或者failed但/dev/md0依然在线/data里的数据依然可以正常访问。这正是RAID 5的容错价值。生产中如果硬RAID卡检测到磁盘故障一般会自动做标记日志里同步出现包涵rebuild或者fail的记录处理思路是一样的。4.2 换盘与自动重建故障盘确定后先从阵列中逻辑移除该盘mdadm --manage /dev/md0 --remove /dev/sdb如果提示设备忙先确认有没有进程占用该盘比如fuser -v /dev/sdb或临时卸载相关目录。接下来把一块新盘插入同一槽位或者直接用另一块干净盘测试然后把它加入阵列mdadm --manage /dev/md0 --add /dev/sde如果之前配置了热备盘这一步系统会自动接管不需要手动添加。加入新盘后阵列会自动开始重建查看方式还是cat /proc/mdstat会有recovery进度条。整个重建期间阵列性能会有所下降这是正常现象。尤其生产环境建议在业务低峰期让重建跑完避免重建过程中叠加高IO需求导致业务卡顿。4.3 恢复过程中容易踩的坑第一个坑新盘容量小于原盘。RAID 5虽然允许不同容量的盘混用但重建时如果新盘比坏盘小阵列可能拒绝加入或重建后容量变小。所以换盘前先确认容量宁大勿小。第二个坑重建期间重启或断电。RAID 5允许坏一块盘但重建过程就是把数据重新分配到其他所有盘上如果这时又掉一块盘或者重启中断阵列可能直接失效。生产环境如果无法避免重启尽量先挂载只读或者做快照但最稳妥的还是等重建结束。第三个坑移除坏盘时误操作。确认设备名一定要用lsblk和mdadm --detail核对不能只靠/dev/sdb这种名字判断。曾经有同行在阵列卡管理界面里把正常盘误标记为离线结果触发整列重建风险极大。5. LVM逻辑卷管理实操5.1 三张“地图”PV、VG、LVLVM设计思想其实很好理解。物理卷PV就是真正被LVM纳管的磁盘或分区相当于一块块“原材料地”。卷组VG是多个物理卷合并后形成的一个“资源池”相当于把所有原材料地圈起来统一管理。逻辑卷LV则是从资源池里切出来的“地块”格式化成文件系统后挂载给系统使用。三个层级用一张图来记PV组合成VGVG切割出LV。操作命令上三层对应的查看命令分别是pvs、vgs、lvs非常直观。创建时也要按顺序来pvcreate-vgcreate-lvcreate。理解了这套逻辑扩容缩容就是往池子里加原材料、调整地块大小的过程。5.2 创建LVM让新盘变成可扩容的卷假设服务器新加了一块磁盘/dev/sdd我们想把它做成LVM逻辑卷挂到/data目录。第一步创建物理卷pvcreate /dev/sdd如果你只想把盘上的某个分区纳入LVM比如/dev/sdd1就先分区再执行pvcreate /dev/sdd1。接下来创建卷组vgcreate vg_data /dev/sdd然后从卷组里划分逻辑卷这里示例分出100GBlvcreate -L 100G -n lv_data vg_data-L指定容量-n指定逻辑卷名称。创建完成后逻辑卷设备路径是/dev/vg_data/lv_data。接着格式化并挂载mkfs.xfs /dev/vg_data/lv_data mkdir -p /data mount /dev/vg_data/lv_data /data用df -hT /data和vgs检查一下就能看到逻辑卷与卷组信息。这里特别说明一点/dev/mapper/vg_data-lv_data和/dev/vg_data/lv_data是同一个设备的两种路径表示写fstab或脚本时建议用/dev/mapper/路径或UUID。5.3 LVM扩容与缩容扩容是LVM使用频率最高的操作。场景是/data空间快满了卷组vg_data还有剩余空间。先用vgs确认剩余容量然后执行lvextend -L 50G /dev/vg_data/lv_data这里的50G表示在原有基础上增加50GB如果想去掉加号比如-L 150G则表示扩展到150GB。扩容逻辑卷之后文件系统容量并不会自动变化还需要额外执行文件系统扩容命令。xfs用xfs_growfs /dataext4用resize2fs /dev/vg_data/lv_data记住一个易混淆点xfs扩容用xfs_growfs并指定挂载点ext4用resize2fs并指定设备路径。经常有人只执行lvextend忘了最终同步结果lvdisplay看到容量变了df -h还是老样子就到处问为什么。缩容比扩容复杂生产环境务必谨慎。xfs文件系统不支持缩容所以如果你当初格式化成xfs只能提前规划容量缩容只能重做文件系统。ext4缩容流程是这样的先卸载逻辑卷检查文件系统再缩小文件系统最后缩小逻辑卷umount /data e2fsck -f /dev/vg_data/lv_data resize2fs /dev/vg_data/lv_data 100G lvreduce -L 100G /dev/vg_data/lv_data mount /dev/vg_data/lv_data /datalvreduce前一定要确认数据量不超过目标容量并且e2fsck无错误否则极易造成文件系统损坏。5.4 home目录扩容实操网上搜“lvm扩容home”的人特别多这里专门说一种常见情况根分区空间紧张/home挂在一个单独的逻辑卷上但物理卷所在的磁盘容量已经用完需要新增一块盘来扩容/home。假设/home当前在逻辑卷/dev/vg_home/lv_home上新加磁盘为/dev/sde操作如下pvcreate /dev/sde vgextend vg_home /dev/sde lvextend -L 100G /dev/vg_home/lv_home接着如果/home是ext4文件系统执行resize2fs如果是xfs执行xfs_growfs /home。整个过程中/home不需要卸载在线就能完成。很多教程会告诉你执行lvextend -r这个参数它表示扩容逻辑卷的同时自动扩展文件系统。对ext4系统确实方便但对xfs支持不算好我实际测试时遇到需要手动xfs_growfs的情况更多所以更推荐按文件系统类型执行对应命令反而少踩坑。6. 配置后的状态检查与运维命令6.1 RAID、LVM状态检查命令配置完成后并不是万事大吉日常巡检才是运维工作的常态。RAID相关的几个命令需要熟练掌握cat /proc/mdstat mdadm --detail /dev/md0 mdadm --detail --scancat /proc/mdstat用于快速判断阵列是否正常、是否在同步或重建mdadm --detail /dev/md0能看每块盘的工作状态mdadm --detail --scan输出配置信息方便检查是否与/etc/mdadm.conf一致。LVM状态检查用pvs vgs lvs lsblk df -hTpvs看物理卷是否有异常vgs看卷组剩余空间lvs查逻辑卷容量和状态lsblk看设备和挂载点关系。可以写个简单巡检脚本把这些命令的输出重定向到日志文件并加入监控判断出现failed、recovery等关键词就告警。6.2 性能与健康验证新配置的阵列或逻辑卷上线前建议做一次读写性能测试确认没有硬件异常。最简单的方法是dd测试顺序读写dd if/dev/zero of/mnt/raid5/testfile bs1M count4096 convfdatasync dd if/mnt/raid5/testfile of/dev/null bs1M count4096第一行测试写入第二行测试读取。虽然dd的测试结果受缓存影响较大不能完全代表真实业务性能但作为基准测试足够初步判断。更深入的话可以用iostat -x 1查看磁盘利用率%util、await等指标确认阵列是否存在IO瓶颈。磁盘健康检查也非常重要smartctl -H /dev/sdb smartctl -a /dev/sdb对SSD或HDD都可以看S.M.A.R.T信息重点关注Reallocated_Sector_Ct、Pending_Sector这类指标异常增长的盘。RAID配置只能减少磁盘故障对数据的影响并不能阻止磁盘老化。6.3 运维避坑速查表日常维护中一些容易踩坑的点我整理成了一张速查表方便对号入座。现象可能原因处理方法开机后/dev/md0不存在mdadm.conf配置丢失或设备名变化用mdadm --assemble --scan重新组装修复/etc/mdadm.conffstab挂载失败fstab中写死设备名或设备名漂移改用UUID先执行mount -a验证xfs扩容后容量没变化只执行了lvextend没执行xfs_growfs对挂载点执行xfs_growfsext4缩容后数据无法访问在线缩容或跳过e2fsck检查立刻停止写入联系专业数据恢复强烈建议提前备份RAID阵列处于降级状态但没人发现缺少巡检和告警写巡检脚本监控/proc/mdstat并入告警平台LVM卷组空间足够但无法创建LV未激活卷组或PE数量不足vgchange -ay激活卷组用pvs查看剩余PE情况7. 实战心得这系列笔记写到第五篇我自己在RAID和LVM上踩过的坑不算少。最想强调的一点是生产服务器能上硬件RAID就上硬件RAID别把软RAID当万金油尤其是在IO密集和数据库场景。软RAID适合测试环境、虚拟机、边缘节点它最大的优势是成本低和可迁移性但把几十台机器全部押在软RAID上遇到高负载或大面积磁盘故障时会比较吃力。另外RAID不是备份这句话说了很多遍但每次事故复盘还是会有人栽跟头。阵列能解决磁盘硬件层面的故障但解决不了误删、病毒、文件系统逻辑错误、机房火灾这类问题。真正重要的数据一定要有独立的、离线的或者异地备份切不可因为配了RAID 5就把备份周期放宽。最后建议每位运维同学都在测试环境走一遍完整的故障演练建一个RAID 5人为fail一块盘观察告警是否触发、热备盘能不能接管、重建要多久、数据是否完好再配合LVM在线扩容一次。把这些动作做到条件反射生产环境出问题时才不会被旁边的同事看到自己满头大汗的样子。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门