
1. 需求整体拆解与方案选型思路机房搬迁、存储扩容、业务下线、盘阵退役这几年碰到的磁盘回收需求五花八门但核心动作高度一致把一块或者几块已经不需要的磁盘从银河麒麟v10服务器上干干净净地摘下来既要不影响线上业务又要保证系统重启后不报错、不自动挂载、不留下一堆悬空的逻辑卷。我见过太多人一上来就fdisk删分区结果重启之后系统卡在紧急模式或者lvs里还孤零零挂着几个无法激活的卷组最后只能进单用户模式救火。所以下面这套流程是我反复验证过、在银河麒麟v10 SP1/SP2/SP3上都跑通的完整套路从确认现状、卸载文件系统到删除LVM、擦除分区、清理配置文件一步一步来小白照着做也不会翻车。先说清楚这套操作适合谁。如果你是刚接触国产化服务器运维的工程师手里正好有一台银河麒麟v10需要回收数据盘或者释放LVM空间如果你是系统集成商在给客户做交付前要清理测试盘又或者你的服务器上之前用LVM做过home扩容现在业务迁移要走盘要腾出来——这些场景都适用。涉及的关键词就是银河麒麟v10、LVM、磁盘、服务器、配置文件整篇围绕这五个点展开把每个命令背后的道理讲透让你知其然也知其所以然。1.1 什么场景下需要卸载磁盘和删除LVM先别急着敲命令我们得先搞清楚自己的需求属于哪一类。第一类是物理磁盘退役比如一块1T的SAS盘要拔下来换新盘此时磁盘上可能既有分区又有LVM必须先把上层逻辑关系全部解除再擦分区表否则新盘插上去系统还认到旧的PV UUID会报duplicate PV警告。第二类是LVM空间回收之前给/home或者/data做过lvextend扩容现在业务缩容想把多出来的LV删掉把空间还给卷组甚至把整个卷组删掉让磁盘回到裸盘状态。第三类是更换存储路径服务器从本地盘切到SAN存储原来的本地LVM要全部清理配置文件里也不能再有残留挂载项。这三类场景虽然细节不同但底层的处理顺序是一样的先停业务、再卸载文件系统、然后删除LV、VG、PV最后擦分区、清配置、刷缓存。这个顺序不能乱因为LVM是分层结构PV在最底层对应物理磁盘或分区VG在中间把多个PV聚合成资源池LV在最上层是给文件系统用的逻辑卷。删的时候必须自上而下就像拆积木一样先拿掉顶上的再拆中间的最后处理地基。你要是反过来先删PV系统会直接报错PV is in use因为VG还引用着它。1.2 为什么不能直接用fdisk删分区很多人图省事fdisk /dev/sdb进去一个d删掉分区然后w保存觉得完事了。这在纯裸盘、无LVM的场景下勉强可行但只要涉及LVM这么做几乎必然出问题。原因是LVM在磁盘头部和分区的起始位置写了PV元数据LVM2_member标签fdisk删了分区表PV的元数据可能还残留在磁盘上系统启动时pvscan会扫到这些孤儿PV虽然不会自动激活但会在日志里刷一堆警告有些版本还会导致systemctl status lvm2-pvscan服务报failed。更稳妥的做法是分两步走先让LVM自己把关系解除干净vgremove、pvremove再去动分区表。这样PV元数据会被主动清掉磁盘回到真正的干净状态。我在一台麒麟v10 SP2上实测过直接fdisk删分区后pvs还能看到unknown device的残留记录就是元数据没清导致的后来用pvremove重新处理才彻底正常。1.3 操作前的整体流程与风险控制把整个流程浓缩成一句话确认现状 → 卸载挂载 → 删除LV → 删除VG → 删除PV → 擦分区 → 清配置 → 刷缓存 → 重启验证。这九步里风险最高的是前两步和最后一步。卸载挂载如果没做干净有进程占用会报target is busy重启验证如果配置文件没清干净系统可能进不了正常模式。我一般的做法是先在一台测试机上完整走一遍把每一步的输出记下来再上生产。生产环境操作前一定要做快照或者备份尤其是/etc/fstab、/etc/lvm/lvm.conf、/etc/multipath.conf这几个文件备份成.bak加日期出问题能秒回滚。另外强烈建议在维护窗口操作因为卸载文件系统会让依赖该盘的业务中断这个不用多说但真有人在大白天干过结果数据库直接崩了。2. 操作前的必备排查与数据备份动手之前最忌讳的就是我以为。你以为那块盘没用了结果上面挂着备份目录你以为LV叫lv_home实际是lv_data。所以这一章专门讲怎么把现状摸清楚把该备的备好磨刀不误砍柴工。这一步骤花的时间通常比实际操作还长但它能帮你避免90%的翻车。2.1 摸清磁盘与LVM的完整拓扑第一件事是搞清楚系统里现在有哪些盘、哪些LVM。我习惯用一组命令组合看逐个说。lsblk是最直观的它以树形结构展示磁盘、分区、LVM的父子关系。输出里你能一眼看到/dev/sdb下面挂了/dev/sdb1sdb1又是某个VG的PVVG下面又有几个LV每个LV挂载在哪里。这个树是操作的总地图。lsblk -f加-f会显示文件系统类型、UUID、挂载点信息更全。如果输出里某个LV的MOUNTPOINT有值说明它正在被挂载操作前必须卸载。接着看LVM的详细情况pvs # 查看物理卷 vgs # 查看卷组 lvs # 查看逻辑卷pvs输出里重点看PV Name对应哪个设备、VG Name属于哪个卷组、PV Size。vgs看卷组剩余空间和包含几个PV。lvs看每个逻辑卷的大小和所属卷组。这三个命令的输出要交叉比对确认没有遗漏。再看挂载和分区df -hT # 查看已挂载的文件系统 mount | grep sd # 查看磁盘挂载 blkid # 查看块设备UUID和类型 fdisk -l /dev/sdb # 查看指定磁盘分区表注意blkid输出里的TYPELVM2_member就说明这个分区是PVTYPEext4或xfs才是文件系统。麒麟v10默认根分区用xfs数据盘常见ext4两者卸载命令一样但后面清理细节略有区别。2.2 确认挂载点、进程占用与开机自启确认了拓扑接下来要确认谁在用这块盘。最直接的方法是看挂载点mount | grep /dev/mapper如果LV正在挂载比如/dev/mapper/vg_data-lv_home on /home type ext4那说明/home在用这块盘。这时候不能直接umount得先确认没有进程在读写。用lsof和fuser两把利器排查占用lsof /home fuser -mv /homelsof会列出打开该目录下文件的进程fuser -mv会显示哪个进程的哪个用户在使用这个挂载点。如果发现有进程先停服务再卸载。我碰到过一次nginx日志目录挂在待卸载的盘上直接umount报busy后来systemctl stop nginx才解决。还要确认开机自动挂载。检查/etc/fstabgrep -E sd|mapper /etc/fstab只要看到待卸载磁盘或LV的挂载项就要记下来后面统一清理。这一步漏了重启必然出问题。另外如果用了autofs还要检查/etc/auto.master和相关map文件如果用了systemd mount unit检查/etc/systemd/system/下有没有对应的.mount文件。2.3 数据备份与回滚预案这一步是底线。哪怕你100%确定盘里没数据也建议备份配置文件。要备份的清单如下cp /etc/fstab /etc/fstab.bak.$(date %F) cp /etc/lvm/lvm.conf /etc/lvm/lvm.conf.bak.$(date %F) cp /etc/multipath.conf /etc/multipath.conf.bak.$(date %F) 2/dev/null vgcfgbackup -f /root/vgcfgbackup_$(date %F).txt # 备份VG元数据vgcfgbackup这个命令很多人不知道它会把当前所有卷组的配置信息导出成文本万一误删VG可以用vgcfgrestore恢复元数据。虽然不能恢复数据但能救回卷组结构省去重建的麻烦。如果有重要数据用rsync或者tar先拷到别的盘rsync -avP /data/ /backup/data_$(date %F)/提示LVM删除是不可逆操作lvremove之后数据基本找不回来。别迷信数据恢复工具LVM的条带化和元数据布局让恢复难度极高。所以确认无用这四个字一定要落实到人最好让业务方书面确认。3. 逐步卸载磁盘与删除LVM的实操准备工作做完正式进入操作环节。这一章是全文的核心我会把每一步的命令、输出含义、注意事项都讲清楚。整个删除顺序是自上而下文件系统 → LV → VG → PV → 分区。记住这个方向就不会乱。3.1 卸载文件系统与停止相关服务第一步卸载所有挂载的LV或分区。假设我们要处理的是/dev/mapper/vg_data-lv_home挂载在/homeumount /home如果报target is busy先cd /切出目录再用fuser -km /home强制踢掉占用进程慎用会杀掉进程或者老老实实找到进程停服务。卸载成功后再确认mount | grep /home没有任何输出才算卸载干净。如果这块盘上有LVM快照snapshot先删快照再删原LV因为快照引用着原卷lvs # 先看有没有snap lvremove /dev/vg_data/lv_home_snap同时别忘了停掉可能依赖这块盘的服务比如数据库、日志服务、监控agent。麒麟v10上可以用systemctl list-units --typeservice --staterunning看看跑着哪些服务评估是否有依赖。3.2 删除LV、VG、PV的正确顺序文件系统卸载后开始拆LVM。顺序是LV → VG → PV一层一层来。先删逻辑卷lvremove /dev/vg_data/lv_home系统会提示确认输入y。如果有多个LV可以一次性删lvremove /dev/vg_data/lv_data /dev/vg_data/lv_log如果LV处于激活状态删不掉先lvchange -an /dev/vg_data/lv_home去激活再删。删完用lvs确认该卷组下应该没有LV了。接着删卷组vgremove vg_data卷组必须在其下所有LV都删除后才能删。如果VG里有PV还活跃vgremove会报错先排查。删完用vgs确认。最后删物理卷pvremove /dev/sdb1如果PV对应的是整块盘没分区就是pvremove /dev/sdb。这一步会把磁盘头部的LVM2_member标签清掉。删完用pvs确认对应的PV应该消失了。注意这三个命令的先后顺序绝对不能反。vgremove会连带把VG的元数据删掉但如果VG里还有LV它会拒绝执行。pvremove要求PV不属于任何VG。所以自上而下是硬性规则。3.3 擦除分区表与磁盘标识LVM关系解除后磁盘就成了一块有分区表但没用的裸设备。如果你想让磁盘彻底回到出厂状态需要清掉分区表和残留标识。用fdisk或parted删分区。以fdisk为例fdisk /dev/sdb # 进入后输入 p 查看分区 # 输入 d 删除分区多个分区重复 d # 输入 w 保存退出或者用parted更干净parted /dev/sdb mklabel gpt # 重建分区表会清空所有分区提示mklabel会瞬间清空分区表确认盘上无数据再用。如果想彻底擦除磁盘头部的所有残留包括PV标签、文件系统超级块可以用dd if/dev/zero of/dev/sdb bs1M count100这个命令往磁盘前100M写零足以覆盖分区表、PV元数据、文件系统超级块。之后wipefs -a /dev/sdb再扫一遍确保没有残留标识wipefs -a /dev/sdb wipefs -n /dev/sdb # -n只预览不执行确认无输出wipefs是专门用来擦除设备签名signature的工具比dd更精准推荐两个配合用。3.4 刷新内核识别与验证结果分区表改完后有时候内核还缓存着旧的分区信息需要刷新partprobe /dev/sdb或者用更底层的blockdev --rereadpt /dev/sdb刷新后再用lsblk看/dev/sdb下面应该不再有sdX1之类的子节点pvs里也不应该有它。最后确认一遍lsblk pvs vgs lvs blkid | grep sdb理想状态下blkid应该完全没有sdb的输出说明签名已清干净。到这里磁盘层面的操作就完成了接下来处理配置文件。4. 配置文件清理与残留排查很多人的操作到这里就结束了结果重启后系统报错、进紧急模式问题就出在配置文件没清。LVM和磁盘相关的配置文件有好几个分布在/etc下的不同位置这一章逐个梳理把该清的清干净。4.1 fstab与自动挂载配置清理/etc/fstab是重灾区。只要里面有对已删除设备的挂载项系统启动时就会尝试挂载挂不上就报错严重时卡在emergency mode。清理方法vim /etc/fstab找到包含待删磁盘或LV的行比如/dev/mapper/vg_data-lv_home /home ext4 defaults 0 0整行删除或注释掉。如果用UUID挂载UUIDxxxx-xxxx /home ext4 defaults 0 0同样删掉。改完用mount -a测试一下没有报错说明配置正常mount -a注意mount -a会挂载fstab里所有未挂载的项如果还有别的盘没挂会一起挂上这是预期行为。如果有报错说明fstab里还有问题项仔细排查。如果用了systemd的mount unit删掉对应文件systemctl disable home.mount rm /etc/systemd/system/home.mount systemctl daemon-reload4.2 LVM元数据缓存与扫描配置LVM有一套自己的缓存和扫描机制。删除PV后/etc/lvm/cache/.cache里可能还残留旧记录一般不用手动清vgscan会刷新。但有个地方要注意/etc/lvm/lvm.conf里可能配置了设备过滤规则比如filter [ a|/dev/sdb|, r|.*| ]如果写死了某块盘删盘后规则还在最好一并清理改成通用规则或者把特定条目去掉。改完执行vgscan --cache让LVM重新扫描并刷新缓存。再检查/etc/lvm/backup/和/etc/lvm/archive/目录这里存放卷组的备份和归档文件如果卷组已删对应的文件可以清掉ls /etc/lvm/backup/ ls /etc/lvm/archive/ rm /etc/lvm/backup/vg_data留着也不影响运行但有洁癖或者担心误扫描的话清掉更清爽。4.3 多路径、iSCSI与其他残留检查如果服务器接了SAN存储或者用了多路径软件/etc/multipath.conf和multipathd服务里可能有残留的wwid映射。先看多路径状态multipath -ll如果输出里有待删磁盘的wwid用multipath -f wwid # 刷新该多路径设备然后在/etc/multipath.conf的blacklist里加上或者删掉对应配置重启multipathdsystemctl restart multipathd如果用了iSCSI还要iscsiadm登出并删除节点记录。这些存储协议相关的清理核心原则是谁引用了这块盘就在谁的配置里解除引用。最后做一个全面残留检查。我常用的组合grep -r sdb\|vg_data\|lv_home /etc/ 2/dev/null把上面命令的sdb、vg_data换成你实际删的设备名和卷组名看/etc下还有哪些文件引用了它们。重点关注/etc/fstab、/etc/mtab、/etc/crypttab、/etc/exports如果配了NFS、/etc/rc.local。这个grep是兜底手段能揪出你意想不到的残留。5. 常见问题与排查技巧实录即便流程再规范实操中还是会遇到各种报错。这一章把我和同行踩过的坑整理出来配上排查思路和解决办法遇到问题直接对着查。5.1 卸载时报device is busy怎么办这是最高频的问题报错长这样umount: /home: target is busy.原因是有进程占用或者有进程的工作目录在这个挂载点下。排查顺序fuser -mv /home看哪个进程在用lsof D /home列出打开该目录下文件的进程cd /确认自己不在该目录里自己占用的坑最容易被忽略停掉相关服务后重试。如果实在找不到进程可以用lsof | grep /home全量搜。还有一种情况是NFS导出占用了挂载点exportfs -v看一下有没有相关导出。实在不行umount -l /home做懒卸载但这是下策懒卸载后进程继续写会出问题只适合维护窗口内应急。5.2 LV删除报Logical volume is in useLogical volume vg_data/lv_home in use.说明LV还处于激活状态或者有挂载。先确认卸载umount /dev/vg_data/lv_home lvchange -an /dev/vg_data/lv_home lvremove /dev/vg_data/lv_home如果报LV is used by another device可能是被dm设备引用用dmsetup ls看有没有相关的device mapper条目必要时dmsetup remove清掉。还有可能是快照或thin pool引用了它lvs -a -o devices看依赖关系。5.3 重启后磁盘又出现或系统进紧急模式重启后lsblk又看到/dev/sdb有分区通常是分区表没擦干净或者partprobe没生效。进系统后重新wipefs -a /dev/sdb加dd擦头部。系统进紧急模式八成是fstab里有挂不上的项。在紧急模式下根分区通常是只读挂载的需要重新挂载为读写mount -o remount,rw / vim /etc/fstab # 删掉问题项 reboot紧急模式里如果没有vim用vi或者nano再不行用sed直接改。这就是前面强调备份fstab的原因——有备份可以直接覆盖回去。5.4 常见问题速查表问题现象可能原因排查命令解决方式umount target is busy进程占用挂载点fuser -mv、lsof停服务或fuser -kmLV is in useLV未去激活/被引用lvs -a -o deviceslvchange -an后删除PV is in usePV属于VGpvs先删VG再删PVvgremove拒绝执行VG下有LVlvs先删所有LV重启进紧急模式fstab残留挂载项cat /etc/fstab注释或删除问题行磁盘出现duplicate PVPV元数据未清pvs、blkidpvremove加wipefs分区删了又出现分区表缓存未刷lsblk、partprobeblockdev --rereadptblkid仍显示旧类型超级块残留blkid、wipefs -nwipefs -a擦除这张表建议收藏遇到报错直接对照。我自己最常遇到的是前三个基本占了八成情况。我个人在实际操作中的体会是这套流程里最容易被低估的是确认现状和清理配置两头。中间删LVM的命令其实很简单就那么几条但前面的排查决定了你会不会删错盘后面的配置清理决定了重启稳不稳。我见过删错盘的惨案就是因为lsblk没看仔细把系统盘当数据盘处理了。所以每次动手前我都会在纸上或者文本里把盘符、VG名、LV名、挂载点列一遍对着lsblk的输出核三遍再敲回车。另外一个小技巧是删LVM之前先vgcfgbackup备份一次元数据真删错了还能vgcfgrestore把结构找回来虽然数据救不回但至少不用从头重建分区和卷组。这套流程在麒麟v10 SP3上跑了不下二十台机器目前零事故希望对你有用。