银河麒麟V10系统中EXT4/XFS等现代文件系统通过延迟分配、多块预分配和B+树索引主动规避碎片化,但高频小文件写入、日志轮转或磁盘近满载(>95%)仍会导致块分布离散,引发await飙升、dd速度骤降等问题;此时应优先用iotop定位高IO进程,再通过lsof追溯其写入路径,并结合dumpe2fs和e4defrag评估ext4碎片风险。

银河麒麟V10系统中不存在传统Windows意义上的“磁盘碎片”概念,EXT4/XFS等现代Linux文件系统通过延迟分配、多块预分配和B+树索引等机制主动规避碎片化,但持续高频小文件写入、日志轮转、容器镜像层叠加或ext4文件系统在接近满载(>95%)时仍会引发块分布离散,表现为iostat中%util正常但await飙升、dd写入速度骤降、fsck耗时异常增长——此时需定位触发该现象的具体进程而非扫描“碎片”。
用iotop实时抓取高IO写入进程
打开终端,执行:sudo iotop -oP。
该命令仅显示正在执行IO操作的进程(-o),且以实际字节/秒排序(-P),避免被后台刷盘线程干扰。重点关注“WRITE”列数值持续高于5MB/s的进程,如rsync、journalctl、dockerd、clamav-freshclam等。
若提示command not found,先运行:sudo apt install iotop。
追溯进程写入的具体文件路径
在iotop中记下可疑进程的PID(例如12345),执行:
sudo lsof -p 12345 | grep "REG.*w" | head -n 5。
这条命令筛选出该进程当前以写模式(w)打开的普通文件(REG),输出包含文件路径、文件大小及锁状态。重点观察路径是否指向/var/log/journal/、/var/lib/docker/overlay2/、/home/user/.cache/这类易堆积小文件的目录。
【注意:若lsof输出为空,说明该进程已关闭文件句柄但仍在内存缓冲区刷盘,此时需结合/proc/PID/io中的wchar值判断累计写入量】。
验证文件系统级碎片倾向
第一步:确认目标分区文件系统类型
执行:df -T / | tail -1 | awk '{print $2}',若输出为ext4则继续;若为xfs,跳过后续ext4专用检测。
第二步:检查ext4碎片程度
执行:sudo dumpe2fs -h /dev/sda1 2>/dev/null | grep -E "(Free blocks|Block count)",将sda1替换为实际根分区设备名(可用lsblk确认)。计算空闲块占比:Free blocks ÷ Block count。若低于5%,则文件系统已处于高碎片风险阈值,此时任何新写入都极易加剧离散分布。
第三步:定位该分区上最碎的目录(仅ext4有效)
执行:sudo e4defrag -c / 2>/dev/null | grep -E "^(Directory|Files)" | head -n 10。此命令不执行整理,仅统计各目录下文件平均碎片数(fragments/file),数值>3即表明该目录内文件严重离散。

















