
1. 项目缘起为什么在银河麒麟服务器上必须搞懂LVM最近在给一个客户的国产化项目做技术支撑他们的核心业务系统要迁移到银河麒麟高级服务器操作系统V10上。在规划存储方案时客户的技术负责人提了一个很实际的问题“我们这几台物理服务器有的硬盘是2块1TB的SATA盘做的RAID 1有的是4块800GB的SAS盘做的RAID 10现在要部署数据库和应用怎么分配空间才能既保证性能又方便以后扩容” 我几乎没怎么犹豫就回复了三个字母LVM。逻辑卷管理器Logical Volume Manager, LVM在Linux世界里算不上什么新鲜玩意儿但对于从Windows Server或者传统物理分区方案迁移过来的团队来说它带来的灵活性是颠覆性的。尤其是在银河麒麟这类面向关键业务的服务器操作系统上存储管理的稳健与灵活直接关系到业务的连续性和运维效率。简单来说LVM允许你将多块物理硬盘或RAID阵列抽象成一个大的“存储池”卷组然后从这个池子里按需切分出“逻辑卷”来使用并且能在不停机的情况下动态调整卷的大小、添加新硬盘、甚至做快照备份。你可能会想用传统的分区比如/dev/sda1,/dev/sdb2不也一样吗这里面的区别大了。传统分区一旦创建大小就固定死了。你想给/home目录扩容50G如果它所在的sdb2分区后面没有连续未分配空间对不起基本无解只能备份数据、重建分区、恢复数据流程繁琐且存在风险。而LVM的逻辑卷则像一块可以随意拉伸和收缩的“橡皮泥”只要卷组里还有剩余空间你给逻辑卷扩容就是几条命令的事应用完全无感知。结合热搜词来看“linux配置lvm”是长期的热门话题而“安装欧拉进行自定义新挂载点将使用以下分区方案btrfs、标准分区、lvm、lvm简单配”也说明了在openEuler、银河麒麟这类企业级Linux发行版的安装器中LVM已经是一个标准且推荐的选择。因此掌握在银河麒麟服务器上配置和管理LVM不是一项“锦上添花”的技能而是构建一个高可用、易运维的存储基础架构的必备基础。2. 核心概念扫盲物理卷、卷组与逻辑卷到底是什么在动手敲命令之前我们必须把LVM的三个核心层级的对象及其关系彻底理清。很多初学者配置失败或者后续管理混乱根源就在于概念模糊。你可以把LVM的架构想象成一个现代化的“仓储物流系统”。第一层物理卷Physical Volume, PV—— 原材料仓库物理卷是LVM管理的基本存储单元。它通常就是一块硬盘如/dev/sdb或者一个RAID设备如/dev/md0甚至是一个分区如/dev/sda2。但请注意一个物理卷在加入LVM体系后就不再适合直接存放普通文件系统了。创建物理卷的过程相当于给这个存储设备贴上“LVM专用”的标签并在其开头写入一个LVM元数据头。命令pvcreate就是干这个的。你可以通过pvs或pvdisplay查看系统中的物理卷。第二层卷组Volume Group, VG—— 中央调配中心卷组是由一个或多个物理卷“聚合”而成的大存储池。这是LVM灵活性的核心所在。不同容量、不同性能如SATA和SAS、甚至不同接口的物理硬盘都可以被加入到同一个卷组里。卷组管理着所有底层物理卷的存储空间并将其抽象成许多大小固定的“存储块”称为物理区域Physical Extent, PE。PE的大小在创建卷组时指定默认4MB它是LVM空间分配的最小单位。命令vgcreate用于创建卷组vgs和vgdisplay用于查看。第三层逻辑卷Logical Volume, LV—— 按需配送的货架逻辑卷才是最终被操作系统挂载和使用的那部分空间它建立在卷组之上。你可以把逻辑卷理解为从卷组这个大池子里划出来的一片连续的逻辑空间实际上物理上可能是不连续的。创建逻辑卷时你需要指定它由多少个PE组成。之后你就可以像使用普通分区一样在逻辑卷上创建文件系统如ext4, xfs然后挂载到目录上使用。命令lvcreate用于创建逻辑卷lvs和lvdisplay用于查看。它们三者的关系是多个PV组成一个VG从一个VG中可以划分出多个LV。一个物理卷只能属于一个卷组但一个卷组可以包含多个物理卷一个逻辑卷只能属于一个卷组但一个卷组可以创建多个逻辑卷。这里有一个非常重要的经验点PE大小的选择。默认4MB对于大多数场景是合适的。但如果你计划创建非常大的逻辑卷比如超过1TB或者对存储效率有极致要求可以考虑增大PE大小如32MB、64MB。因为LVM的元数据需要记录每个逻辑卷包含了哪些PEPE越小管理大量空间时元数据就越大。不过一旦卷组创建完成PE大小就不可更改。所以在vgcreate时用-s参数指定PE大小是需要提前规划好的。3. 实战配置在银河麒麟V10上从零构建LVM存储理论说再多不如动手做一遍。我们假设一个典型的服务器场景系统盘/dev/sda已安装银河麒麟操作系统我们新增了两块数据盘/dev/sdb和/dev/sdc每块1TB需要配置为LVM供/data目录使用。重要安全提示以下操作会清空磁盘数据。请务必确认操作对象是新增的空白磁盘而非系统盘或存有重要数据的磁盘。在生产环境中操作前务必做好备份和验证。3.1 环境准备与磁盘识别首先我们需要确认磁盘情况。使用lsblk或fdisk -l命令查看磁盘信息。sudo fdisk -l /dev/sdb /dev/sdc你应该能看到类似以下的输出确认磁盘没有分区表或已有分区可以被安全清除。Disk /dev/sdb: 1 TiB, 1099511627776 bytes, 2147483648 sectors Disk model: Your-Disk-Model Units: sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk /dev/sdc: 1 TiB, 1099511627776 bytes, 2147483648 sectors Disk model: Your-Disk-Model Units: sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes3.2 创建物理卷PV我们将这两块裸盘初始化为物理卷。sudo pvcreate /dev/sdb /dev/sdc执行成功后使用pvs命令查看sudo pvs输出应类似PV VG Fmt Attr PSize PFree /dev/sdb lvm2 --- 1.00t 1.00t /dev/sdc lvm2 --- 1.00t 1.00t这表示两块盘都已是物理卷尚未加入任何卷组VG列为空。踩坑点一磁盘已有分区或签名。如果磁盘之前被使用过可能有残留的分区表或文件系统签名magic number。pvcreate可能会报错“Device /dev/sdb excluded by a filter”。此时可以用wipefs -a /dev/sdb命令擦除所有签名或者使用fdisk/parted工具删除所有旧分区。3.3 创建卷组VG我们将这两个物理卷合并创建一个名为datavg的卷组。这里我们使用默认的4MB PE大小。sudo vgcreate datavg /dev/sdb /dev/sdc创建完成后使用vgs和vgdisplay查看详情sudo vgs datavg sudo vgdisplay datavgvgdisplay会显示详细信息包括VG名称、格式、总大小、可用大小、PE大小、PE总数/可用数等。此时总大小应约为2TB。3.4 创建逻辑卷LV现在我们从datavg中划出一个1.5TB的逻辑卷命名为datalv。sudo lvcreate -L 1.5T -n datalv datavg参数说明-L 1.5T指定逻辑卷大小为1.5TB。你也可以使用-l参数指定PE数量例如-l 100%FREE表示使用卷组所有剩余空间。-n datalv指定逻辑卷名。datavg指定从哪个卷组创建。创建后逻辑卷的设备文件通常位于/dev/mapper/目录下如/dev/mapper/datavg-datalv同时会在/dev/卷组名/目录下有一个符号链接如/dev/datavg/datalv。使用lvs和lvdisplay查看。sudo lvs sudo lvdisplay /dev/datavg/datalv3.5 创建文件系统并挂载逻辑卷创建好后它就像一块新的“虚拟硬盘”我们需要在上面创建文件系统才能存储数据。对于大型数据存储XFS通常是比ext4更好的选择因为它对超大容量和文件的支持更好且在线扩容仅限增大非常方便。# 创建XFS文件系统 sudo mkfs.xfs /dev/datavg/datalv # 创建挂载点目录 sudo mkdir -p /data # 临时挂载 sudo mount /dev/datavg/datalv /data使用df -h命令检查挂载是否成功。3.6 配置开机自动挂载临时挂载重启后会失效。我们需要将其写入/etc/fstab文件。这里有一个关键步骤获取文件系统的UUID或使用LVM设备路径。方法一推荐使用UUID 首先获取逻辑卷的文件系统UUIDsudo blkid /dev/datavg/datalv输出类似/dev/mapper/datavg-datalv: UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 TYPExfs然后编辑/etc/fstab文件sudo vim /etc/fstab在文件末尾添加一行UUIDa1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8 /data xfs defaults 0 0方法二使用LVM设备路径 在/etc/fstab中添加/dev/mapper/datavg-datalv /data xfs defaults 0 0或者/dev/datavg/datalv /data xfs defaults 0 0强烈建议使用UUID。因为设备名如/dev/sdb在系统启动过程中可能会因硬盘检测顺序变化而改变导致挂载失败。而UUID和LVM的设备路径/dev/mapper/...是稳定的。添加完成后使用sudo mount -a命令测试配置是否正确。该命令会挂载fstab中所有未挂载的文件系统如果没有报错则说明配置成功。4. LVM核心管理操作扩容、缩容与快照配置好只是开始LVM的强大体现在日常运维的灵活性上。下面我们针对几种常见场景进行操作详解。4.1 逻辑卷在线扩容增加容量这是LVM最常用的功能。假设我们的/data空间快用满了现在需要给datalv逻辑卷增加200GB空间。前提卷组datavg必须有足够的剩余空间。可以用vgs或vgdisplay查看VFree。步骤扩展逻辑卷空间使用lvextend命令。sudo lvextend -L 200G /dev/datavg/datalv参数-L 200G表示在原有基础上增加200GB。如果想扩展到绝对大小用-L 500G假设原为300G则扩展到500G。扩展文件系统逻辑卷变大了但上面的文件系统还不知道这个变化需要同步扩大文件系统。对于XFS文件系统XFS文件系统只支持在线扩容不支持缩容。sudo xfs_growfs /data注意xfs_growfs的参数是挂载点而不是设备路径。执行后使用df -h查看/data的容量应该已经增加。对于ext4文件系统# 先检查文件系统可选但推荐 sudo e2fsck -f /dev/datavg/datalv # 调整文件系统大小 sudo resize2fs /dev/datavg/datalvresize2fs命令会自动检测逻辑卷的新大小并调整文件系统。关键经验一定要先扩逻辑卷lvextend再扩文件系统xfs_growfs或resize2fs。顺序反了会报错。对于XFS操作极其简单且在线完成业务无需中断。4.2 卷组扩容添加新物理磁盘当卷组空间不足时我们可以添加新的物理硬盘。假设我们新增了第三块硬盘/dev/sdd。步骤初始化新硬盘为物理卷sudo pvcreate /dev/sdd将新物理卷加入到现有卷组datavgsudo vgextend datavg /dev/sdd使用vgs查看datavg的VSize和VFree应该已经增加。之后你就可以使用lvextend为逻辑卷扩容了。4.3 逻辑卷缩容减少容量警告缩容是高风险操作务必先备份数据并且不是所有文件系统都支持缩容。XFS不支持缩容。ext4支持但步骤比扩容复杂。ext4逻辑卷缩容步骤卸载文件系统缩容通常需要离线进行。sudo umount /data强制检查文件系统sudo e2fsck -f /dev/datavg/datalv缩小文件系统必须先缩小文件系统再缩小逻辑卷顺序与扩容相反。sudo resize2fs /dev/datavg/datalv 100G此命令将文件系统缩小到100GB。缩小逻辑卷sudo lvreduce -L 100G /dev/datavg/datalv这里的大小必须与上一步的文件系统新大小一致或略大通常保持一致。重新挂载sudo mount /dev/datavg/datalv /data由于风险较高在生产环境中除非万不得已否则应尽量避免缩容操作优先考虑通过数据迁移或归档来释放空间。4.4 逻辑卷快照LVM快照提供了一个瞬间的逻辑卷“冻结”视图常用于数据备份或测试而无需停止应用。创建快照卷几乎瞬间完成因为它最初只存储原始卷发生变化的数据块写时复制Copy-On-Write。创建快照 假设我们要为datalv创建一个名为datalv_snap的快照用于备份。sudo lvcreate -L 10G -s -n datalv_snap /dev/datavg/datalv参数说明-L 10G为快照卷分配的空间大小。这是关键参数它不表示快照的大小而是用于存放原始卷变化数据的空间。如果原始卷的数据变化量超过了10G快照卷将自动失效。因此这个大小需要根据备份窗口内数据的“变化量”来估算。-s表示创建快照。-n datalv_snap快照卷名称。创建后你会看到一个新的逻辑卷设备例如/dev/datavg/datalv_snap。你可以像挂载普通逻辑卷一样挂载它通常以只读方式进行备份操作。sudo mount -o ro /dev/datavg/datalv_snap /mnt/snapshot_backup # ... 执行备份操作 ... sudo umount /mnt/snapshot_backup删除快照 备份完成后应及时删除快照以释放空间。sudo lvremove /dev/datavg/datalv_snap快照使用心得规划快照空间这是最容易出问题的地方。如果应用写入非常频繁快照空间可能会迅速耗尽。监控快照空间使用率lvs命令查看Data%列很重要。性能影响快卷存在期间对原始卷的写入会因写时复制机制而有轻微性能开销需要写两份元数据。对于极高IO负载的卷需谨慎。不是备份的替代品快照依赖于原始卷如果原始卷物理损坏快照也无法恢复。因此快照应作为“在线备份的辅助手段”最终数据仍需归档到其他存储介质。5. 故障排查与日常运维要点即使配置正确在生产环境中也可能遇到各种问题。结合热搜词中“银河麒麟系统v10 执行 mysqld --initialize无反应,不知到创建成功了吗”这类模糊的报错场景掌握排查思路比记住命令更重要。5.1 常见问题与排查命令链问题一无法挂载逻辑卷提示“mount: wrong fs type, bad option, bad superblock...”排查思路确认设备路径ls -l /dev/mapper/datavg-datalv和ls -l /dev/datavg/确认逻辑卷设备文件存在。检查文件系统类型sudo blkid /dev/datavg/datalv确认TYPE是否是xfs或ext4与你mount命令或fstab中指定的是否一致。检查文件系统完整性针对ext4sudo fsck.ext4 -n /dev/datavg/datalv-n表示只检查不修复。对于XFS使用sudo xfs_repair -n。检查/etc/fstab确认UUID或设备路径是否正确特别是是否有拼写错误或多余的空格。问题二vgdisplay或lvdisplay命令看不到卷组或逻辑卷排查思路扫描并激活卷组LVM配置信息可能未加载。执行sudo vgscan扫描所有卷组然后sudo vgchange -ay datavg激活指定的卷组-ay表示激活。检查内核模块lsmod | grep dm_mod确保device-mapper内核模块已加载。银河麒麟默认应已加载。检查物理卷状态sudo pvscan确认物理卷是否正常。有时磁盘故障或连接问题会导致PV丢失。问题三扩容文件系统时xfs_growfs或resize2fs报错排查思路确认逻辑卷已扩容先执行sudo lvs确认逻辑卷的LSize确实已经变大。如果没变先执行lvextend。对XFS确认挂载点xfs_growfs必须针对挂载点而不是设备文件。使用df -h确认正确的挂载点路径。对ext4确认已卸载对于缩容或已挂载对于扩容resize2fs在线扩容要求文件系统已挂载离线缩容要求已卸载。5.2 数据迁移与替换磁盘当某块物理硬盘如/dev/sdb出现预警需要更换时LVM可以做到在线数据迁移。标记物理卷为丢失如果磁盘已故障sudo pvchange -x n /dev/sdb-x n表示不允许分配新PE到此PV。将数据从坏盘移出使用pvmove。# 如果卷组有其他空闲空间可以直接移出 sudo pvmove /dev/sdb # 或者指定移到另一块盘/dev/sdd sudo pvmove /dev/sdb /dev/sdd此过程耗时取决于数据量期间逻辑卷仍可正常访问。从卷组中移除坏盘sudo vgreduce datavg /dev/sdb移除物理卷属性sudo pvremove /dev/sdb物理上更换硬盘后再将新硬盘初始化为PV并加入VGpvcreate /dev/sdb_new-vgextend datavg /dev/sdb_new。之后可以使用pvmove将数据均衡回去。5.3 性能监控与优化建议监控命令iostat -x 1可以查看磁盘的利用率%util、读写速率r/s,w/s和响应时间await。结合lvs -oseg_pe_ranges可以查看逻辑卷的物理分布判断是否存在热点盘。条带化Striping对于追求高性能的场景如数据库可以在创建逻辑卷时使用-i和-I参数进行条带化将数据分散到多个PV上提高并发IO能力。例如lvcreate -L 500G -i 2 -I 64 -n stripe_lv datavg。-i 2表示跨越2个PV-I 64表示条带大小64KB。但条带化后移除或替换其中一块PV将变得极其复杂。镜像MirroringLVM也支持镜像功能提供数据冗余。但通常更推荐在硬件RAID卡层面或使用DRBD等方案做冗余LVM镜像的配置和管理相对复杂。在银河麒麟这类稳定优先的服务器环境中我的个人建议是利用硬件RAID如RAID 1, 5, 10提供底层的数据冗余和性能基础再在其上构建LVM来获得存储管理的灵活性。这样既享受了硬件RAID的稳定性和性能又获得了LVM在线扩容、快照等高级功能架构清晰运维可控。