搞国产系统运维这两年,被问得最多的问题不是“怎么安装银河麒麟V10”,而是“装完之后磁盘不够用了怎么办”。尤其是那些在虚拟机上跑银河麒麟V10的同事,系统盘给个40G、50G,开机装完数据库和中间件,一块盘就直接告警。更麻烦的是,好多人一开始没给LVM留余地,分区表、swap、backup分区全挤在一起,等想扩容的时候才发现无从下手。
这篇文章我就把银河麒麟V10(Kylin V10)扩展磁盘空间的完整实操过程从头到尾捋一遍。从最基础的“怎么先看清系统盘方案”、到虚拟机扩容根分区、再到物理机加第二块SSD当数据盘,以及扩容后容易踩的网卡、回收站、无网环境工具准备这些坑,全部覆盖。不管你是刚接触国产化替代的新手,还是已经上手但被磁盘问题卡住的老手,这套流程拿过去基本能直接照着做。
1. 动手前先看清:磁盘现状与扩展方案选择
很多人一上来就执行resize2fs或者fdisk改分区,结果把系统搞到进不去。原因很简单:压根没搞清楚系统盘的底层布局就直接动刀了。银河麒麟V10有服务器版和桌面版,有x86_64也有基于ARM的飞腾、鲲鹏平台,不同场景下系统的分区方案、文件系统类型和引导方式都不一样,必须先摸清楚再决定怎么扩。
1.1 三分钟摸清系统盘方案
进入系统后,我习惯先跑下面几组命令,一组一组看:
df -hT lsblk pvs; vgs; lvs fdisk -l /dev/sdadf -hT是看文件系统的类型和挂载点,重点确认根分区的类型是xfs还是ext4。为什么这个重要?因为xfs文件系统扩容用xfs_growfs,ext4用resize2fs,两个工具不能互换。xfs对于ext4来说还少了一个“只能扩不能缩”的约束,如果你后面想调整分区大小,xfs会麻烦一些。
lsblk看的是磁盘和分区的父子关系。我拿到一台机器,先看有没有vg相关的设备名,比如/dev/mapper/vg0-lv_root,如果有,基本可以确定系统是LVM布局;如果lsblk里全是/dev/sda1、/dev/sda2这种独立分区,那就是普通分区布局。这一步决定了整个扩容路线。
pvs、vgs、lvs是看LVM细节的,确认物理卷、卷组、逻辑卷的当前大小和剩余空间。最核心的一个字段是VFree,也就是卷组里还没分出去的空间,后面扩容全靠它。
[root@kylin ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 vg0 lvm2 a-- 100.00g 20.00g如果PFree有空间,说明卷组本身有空闲,直接给逻辑卷加容量就行。如果PSize已经是磁盘全部分区大小,那就要回到分区层面积扩大物理卷所在分区的尺寸。
fdisk -l和parted -l要看的是分区表信息。银河麒麟V10安装时如果选了自动分区,大概率会分出boot分区、LVM或根分区,还有一个专门的backup分区。这个backup分区的存在感很低,但扩容时经常是它挡住一切,这点我在后文会专门讲。
1.2 不同安装场景决定扩容路线
同样是“磁盘不够”,物理机和虚拟机的处理办法完全是两个世界。
- 虚拟机场景:底层的虚拟磁盘文件(如VMware的vmdk、QEMU的qcow2)只是你“能撑多大”的上限。你可以先不删除任何数据,直接在虚拟化平台把磁盘调大,然后进系统让操作系统认出新容量,再分配给根分区。这是最平滑的一条路,我的建议是优先用这种方式。
- 物理机场景:如果机箱里还有空盘位,最稳妥的办法是加一块新硬盘,格式化后挂载成数据盘,把/var、/opt、/home等目录迁过去。而不是在主盘上去冒分区表调整的风险,尤其是系统已经跑了几年的机器。
- 云主机场景:云平台控制台一般提供“扩容云盘”功能,扩完之后进系统用
growpart和resize2fs完成收尾。跟虚拟机思路类似,只是底层磁盘设备可能是/dev/vda或/dev/nvme0n1。
我见过最危险的操作,是有人在物理机上直接删除中间的分区然后重建,想给根分区腾位置。结果分区起始扇区一改,整个文件系统就废了,数据全没。所以我在这里先立一条原则:在动分区表之前,先把数据备份好,至少搞一个快照。虚拟机就先做快照再操作,物理机就用dd或者xfsdump备份关键目录,这十几分钟花得值得。
2. 虚拟机扩容实录:给根分区加空间的完整步骤
虚拟机上跑银河麒麟V10是现在最常见的部署方式,我以一台VMware Workstation虚拟机为例完整演示一遍扩容根分区的过程。底层逻辑其实相通:先改虚拟磁盘大小,再在系统里利用多出来的空间扩展LVM或普通分区,最后在线扩文件系统。
2.1 虚拟机层先把磁盘拉大
关机状态下,在VMware Workstation里右键虚拟机,进入“虚拟机设置”,选择硬盘,点“扩展”,把磁盘从100G改成200G。这一步是修改底层vmdk文件的大小,修改后开机。
开机后你会看到很神奇的一幕:df -h显示的根分区还是原来的大小,但lsblk里sda已经从100G变成了200G。这是因为磁盘设备变大了,但操作系统里分区表记录的还是旧的容量信息,需要手动让分区“吃下”新增空间。
提示:VMware的“扩展”功能只能把磁盘变大,不能变小。操作前如果想稳妥一点,先用
vcb或者直接在虚拟机上做快照,再执行扩容。
2.2 LVM场景下在线扩容根分区
如果你系统安装时选的是自动分区,多半是LVM布局。登录后先确认:
df -hT / lvdisplay比如根文件系统的设备路径是/dev/mapper/vg0-lv_root,文件系统是xfs。那么整个扩容流程分三步:扩PV、扩LV、扩文件系统。
第一步,用fdisk /dev/sda进入交互界面,查看当前分区表,确认哪个分区是LVM物理卷用的。假设是/dev/sda2,记住它结束的扇区号,然后删除这个分区再重建。这里有四个字:千万别慌。因为LVM本身有逻辑卷元数据,重建分区的时候只要起始扇区不改变,数据一点也不受影响。Delete掉/dev/sda2,再用n新建主分区,起始扇区沿用原来的数字,结束扇区直接回车让分区表占满剩余空间,最后t把分区类型改回8e(Linux LVM),w写入分区表。
分区表变更后,执行partprobe /dev/sda让内核重新读取,然后刷新物理卷:
pvresize /dev/sda2跑完用pvs看,PSize应该已经变成200G,PFree出现新增的100G空闲空间。接着把空闲空间全部分配给根逻辑卷:
lvextend -l +100%FREE /dev/vg0/lv_root最后扩文件系统。这一步最容易搞错类型。xfs执行:
xfs_growfs /ext4执行:
resize2fs /dev/mapper/vg0-lv_root再次运行df -h /,根分区容量就已经生效了。整个流程下来大概十分钟,不需要重启。
注意:
lvextend命令后面也可以是-L +100G指定固定容量,但我个人更喜欢-l +100%FREE,要么不扩,要么一次吃满,省得以后再操作一遍。
2.3 没有LVM时,普通分区怎么扩
有些银河麒麟V10安装场景(尤其是不小心选了自定义分区方案)是没有LVM的,根分区就是一个普通分区,比如/dev/sda3。这时候扩容逻辑有类似之处,但更依赖growpart这个工具。
同样先确认虚拟机磁盘已经从100G扩到200G,再安装工具:
yum install -y cloud-utils-growpart然后执行:
growpart /dev/sda 3这条命令的作用是把/dev/sda3这个分区的结束位置扩展到磁盘末尾,相当于重新划分分区表但不破坏数据。完成后用lsblk确认分区大小已经变化。接下来按文件系统类型扩:
# ext4 用这个 resize2fs /dev/sda3 # xfs 用这个 xfs_growfs /普通分区扩容有个隐藏难点:如果根分区后面还跟着swap分区或者backup分区,growpart就无法把根分区扩展到磁盘末尾,因为“最后一根绳子”被别的东西占着。这种情况下就得先处理swap或backup分区,典型的做法是:如果swap在根分区后面,先swapoff /dev/sdaX,删掉swap分区,扩根分区,再在空闲位置重建swap分区并更新/etc/fstab。backup分区的处理一样,确认里面没有重要数据后可以删除。
这块操作最容易出错,所以再强调一遍:编辑分区表过程中,全程不要动起始扇区,只允许改结束位置。如果 fdisk 提示分区忙、失败了,不要硬来,重启系统再做一次。
3. 物理机加第二块 SSD 数据盘:格式化、挂载与回收站修复
物理机加盘比虚拟机扩容要直观,但也有它自己的坑。最常见的是:盘加好了、挂载也成功了,数据往里一放,第二天发现普通用户删除文件的时候报“无法为 找到或创建回收站目录”,这不是系统坏了,而是挂载参数和目录权限的问题。这块我一步步展开。
3.1 新盘分区格式化:隐藏的4K对齐坑
先把新SSD接好,开机后确认设备名:
lsblk fdisk -l假设新盘是/dev/sdb,容量为1T。分区操作我建议用parted,因为处理大容量磁盘和GPT分区表更顺手,而且能直接设置对齐策略。
parted /dev/sdb mklabel gpt parted /dev/sdb mkpart primary ext4 1MiB 100%1MiB起盘是关键。老式分区经常从2048s(即1MiB)起步,做到4K对齐没啥问题,但如果你随手写0%或者沿用过时的MBR遗留习惯,SSD性能会下降不少。分区建好后:
mkfs.ext4 /dev/sdb1这里我默认用了ext4而不是xfs。物理机数据盘的选择我一直比较保守:如果数据要频繁读写删除,图省心就ext4,图大文件性能和抗并发写入能力强就xfs。银河麒麟V10对两者支持都没问题,关键是确定好就别中途换。
3.2 开机自动挂载:fstab 别乱写
搞完格式化,接着挂载。挂载有一个很多人翻过车的细节:直接用/dev/sdb1写进/etc/fstab。设备名看着没毛病,但如果你机器后来加了盘或者接口顺序变了,设备名可能变成/dev/sdc1,轻则挂载失败,重则开机直接进紧急模式。正确做法是找UUID。
blkid /dev/sdb1记下UUID,比如UUID="a8b2c3d4-5678-4e9f-9cba-123456789abc",然后创建挂载点并写入/etc/fstab:
mkdir -p /data echo 'UUID="a8b2c3d4-5678-4e9f-9cba-123456789abc" /data ext4 defaults 0 2' >> /etc/fstab systemctl daemon-reload mount -amount -a验证没问题后,用df -h /data看一眼。再去/etc/fstab最后确认一遍,我建议把nofail选项也加上,这样万一盘没插好,系统一样能正常启动,不会掉进紧急模式。完整的挂载选项可以写成defaults,nofail,noatime,其中noatime能减少不必要的写盘,对SSD寿命有好处。
3.3 删除文件报“无法为 找到或创建回收站目录”的真正原因
很多人把数据盘挂到/data后,用普通用户往里面拷贝文件,然后想删除,结果文件管理器弹出一个报错:“无法为 找到或创建回收站目录”。
这个问题的根源是:图形桌面删除文件时默认先进回收站(Trash),而回收站目录要建在被删除文件所在目录上层,通常是挂载点下.Trash-<UID>目录。如果挂载点/data的属主是root,权限是755,普通用户就没法在/data下创建.Trash-UID目录,报错就来了。
三种解决办法,按推荐程度排:
第一种,给普通用户开放挂载点权限:
chown -R user:group /data chmod 755 /data如果这个/data目录本来就是给某个应用用户专用,直接chown就行,一劳永逸。
第二种,改fstab挂载时指定属主:
UUID="a8b2c3d4-5678-4e9f-9cba-123456789abc" /data ext4 defaults,uid=1000,gid=1000,nofail,noatime 0 2适合整个盘只给一个用户用的场景。
第三种,直接跳过回收站删除,在文件管理器设置里关闭“删除前移入回收站”选项,或者用Shift+Delete删除。这种做法只适合个人使用的机器,服务器上不建议改这个,容易误删。
心得:遇到这种报错,第一步永远别急着改挂载选项,先
ls -ld /data看一下属主和权限。八成就是挂载点目录权限不够。改完权限再测一遍删除,比什么都快。
4. 扩容后的常见问题与实战排错
磁盘扩完了,并不意味着万事大吉。很多人的系统扩容前好好的,扩完重启后要么网卡起不来,要么df显示容量没变。我把这段时间积攒的典型问题整理成一个速查清单,帮你少走几小时的弯路。
4.1 重启后网卡起不来的排查思路
“银河麒麟v10命令重启后为什么网卡不启动”是搜索词里的高频问题,也是我排查过最多的网络问题。多数情况是这几种:
一是开机自启没开。检查/etc/sysconfig/network-scripts/ifcfg-ens33或NM管理的连接配置,确保有ONBOOT=yes。很多时候装完系统网卡正常,但重新启动后会掉线,就是这里少了这个参数。
二是接口名变了。虚拟机克隆或者系统迁移后,ens33变成了ens160,参考/etc/udev/rules.d/70-persistent-net.rules或NetworkManager连接配置文件确认实际接口名。
三是NetworkManager和network脚本管理冲突。银河麒麟V10上最常见的是NM接管了接口但配置没写对。用nmcli device查看接口状态,如果状态是disconnected,直接执行:
nmcli device connect ens33再把连接配置的autoconnect yes设上,重启就不会掉。
扩容磁盘时我往往还会顺手动一下/etc/fstab,如果UUID写得不对,开机挂载失败也会拖慢启动甚至跳过network服务,所以我始终建议:改完磁盘接一个重启,别一次性把所有配置全改完再重启。有问题能第一时间定位到是哪个步骤引起的。
4.2 扩容后 df 显示容量没变
这个问题的原因就两层:要么分区没扩,要么文件系统没扩。
用lsblk先确认分区大小有没有变化。如果分区还是老样子,说明growpart或者fdisk那一步没生效,检查有没有被其他分区挡住,或者忘了执行partprobe。如果分区已经变了但df -h还是旧数值,那就差了最后一步:xfs执行xfs_growfs <挂载点>,ext4执行resize2fs <设备路径>。这两个命令既是“最后一步”也是最容易漏的一步。
还有一种比较隐蔽的情况:你的根文件系统虽然挂载在/,但它实际用的是卷组里的逻辑卷,而卷组里新增的空间没有分配到这个逻辑卷上。这时候看lvs,如果LV Size还是老大小,执行lvextend -r -l +100%FREE /dev/vg0/lv_root。-r参数会同时触发文件系统调整,一步到位。
4.3 无网络环境下的扩容工具准备
国产化机器好多是内网环境,没有yum源,这时候卡住你的往往不是技术而是工具。我就被卡过:系统里没有growpart、没有cloud-utils-growpart,连lvm命令倒是常见装好的,但xfs_growfs在精简安装里也可能缺席。
最稳妥的办法是,在一台能联网的同版本银河麒麟V10机器上:
yum install --downloadonly --downloaddir=/root/tools cloud-utils-growpart xfsprogs lvm2 parted然后把整个tools目录拷到U盘,拷进内网机器,执行:
yum localinstall /root/tools/*.rpm -y离线装rpm时如果遇到依赖缺漏,说明下载的rpm不全,把报错缺的包名再通配下载一遍就行。这个思路也适用于内网装docker、mysql这类软件包,属于通用技能。
4.4 空间都去哪了:查找大文件与大文件夹
扩容之前最好先搞清楚磁盘空间到底被谁吃满了,不然扩完没多久又满了。
du -sh /* 2>/dev/null | sort -rh | head -20这条命令能一秒定位到哪个一级目录占用最大。往下钻还可以:
find / -xdev -type f -size +1G -exec ls -lh {} \; 2>/dev/null我实际排查的时候发现,很多V10机器被吃满并不是业务数据太多,而是日志文件没轮转。/var/log/journal或者/var/log/messages几十G是常事。如果有应用服务在疯狂刷日志,先处理日志轮转再考虑扩容,否则扩多大都不够。
还有一个容易忽略的地方:/home下的用户目录里容易藏着各种系统备份、离线安装包,一个安装包好几个G。清理掉旧的rpm包和安装介质往往能腾出一大块空间。
5. 写在最后的建议
银河麒麟V10的磁盘扩容,本质上和普通Linux发行版没什么天壤之别,但因为它常用的安装方案(LVM+backup分区),以及国产化机器经常处于离线环境,实际操作中总会有一些“原来如此”的问题。我个人在多次处理之后,总结出三条最想提醒你的经验。
第一,新建系统时不管空间多紧张,一定要给LVM留余量。哪怕卷组里暂时只有10G空闲,也比以后要用fdisk去动在线分区的风险小得多。第二,给数据盘建挂载点时,看完权限再让业务开始跑,一个chown就能避免“回收站目录”这种莫名其妙的故障。第三,离线环境永远比在线环境多一点准备时间,该有的rpm包、工具包提前备到本地,真到扩容那一步,你会发现顺畅得超乎想象。
这波操作下来,系统的钱包变厚了,你心里的那块大石头也落地了。后面如果再遇到磁盘告警,照着这套流程先自查一遍,大部分问题都能自己解决。