linux排查loop设备资源耗尽,核心是查其后端文件是否占满空间、i/o卡顿或snap累积导致/dev/loopx不可用;需用losetup -a定位绑定文件,df -h和df -i分别检查空间与inode,重点清理/snap等目录下镜像文件。

Linux 中排查 Loop 设备资源耗尽,核心不是查“loop 设备本身”,而是查它背后挂载的文件或镜像是否占满空间、是否被频繁读写导致 I/O 卡顿,或是否因 Snap 等机制持续累积造成 /dev/loopX 对应的虚拟块设备不可用。这类问题常表现为磁盘空间告警、服务启动失败、系统变慢甚至偶发掉线(尤其在嵌入式或容器化场景),但 df -h 显示根分区仍有余量——此时必须盯住 /dev/loop* 这类“隐形磁盘”。
看懂 /dev/loopX 到底挂了什么
Loop 设备是虚拟块设备,本身不占空间,但它背后一定绑着一个普通文件(如 .squashfs、.img 或 Snap 包)。先确认每个 loop 设备关联的真实路径:
- 运行 losetup -a,列出所有已绑定的 loop 设备及其后端文件(例如:
/dev/loop2: [0802]:8413975 (/var/lib/snapd/snaps/core20_2298.snap)) - 对每个后端文件执行 ls -lh 查大小,再用 du -sh 确认实际占用(注意硬链接和去重)
- 重点检查
/var/lib/snapd/snaps/、/snap/、/opt/下的镜像类文件——它们是 loop 资源耗尽的高发区
判断是空间满还是 inode 满
Loop 设备挂载点(如 /snap/core20/2298)一旦只读或无法写入,常见两种情况:
- 用 df -h 查挂载点所在物理分区是否已满;若显示“100%”,继续查具体大文件
- 更隐蔽的是 df -i ——很多 Snap 镜像含数万小文件,极易耗尽 inode。若
Inodes使用率接近 100%,即使空间充足也会报No space left on device - 定位 inode 消耗大户:find /snap -xdev -type f | cut -d/ -f1-3 | sort | uniq -c | sort -nr | head -10
清理或扩容后端文件
确认问题源头后,分两类处理:
- 清理冗余 Snap 包:运行 sudo snap list --all 查看所有版本,再用 sudo snap remove --revision=xxx core20 清理旧版;终极方案是卸载 snapd:sudo apt autoremove --purge snapd(适用于非必须 Snap 的服务器)
-
扩容 loop 后端文件:若该文件是手动创建的虚拟磁盘(如
disk.img),可用 dd if=/dev/zero bs=1M count=1024 >> disk.img 扩容,再用 losetup -c /dev/loopX 重读大小,最后 resize2fs /dev/loopX(需 ext 文件系统)扩展文件系统
预防 loop 资源失控
避免下次再陷入“看不见的满”:
- 定期监控:watch -n 60 'losetup -a; df -h | grep loop; df -i | grep loop'
- 禁用自动更新 Snap:sudo snap set system refresh.timer=disabled,改用手动维护
- 生产环境慎用 Snap;优先用 deb/rpm 或容器镜像替代,减少 loop 设备依赖











