linux出现磁盘耗尽导致报错排障和维护思路
linux系统有一个比较常见的系统故障就是磁盘使用空间耗尽,导致系统无法正常运行,同时可能伴随着无法写入日志、启动新进程,甚至某些服务会崩溃。
为了解决上述问题,就必须要进行磁盘的清理和维护,以便系统可以正常运行。
1.确认故障
首先我们需要进入系统内部查看磁盘的使用情况,一般使用df -h的命令就可以进行查看linux系统中哪个磁盘对应的哪个分区出现了磁盘空间占满的情况。

字段解释
| 字段 | 解释 |
|---|---|
| filesystem | 文件系统名称或磁盘分区标识 |
| size | 文件系统的总大小 |
| used | 文件系统已用空间大小 |
| avail | 文件系统可用空间大小 |
| use% | 文件系统使用的百分比 |
| mounted on | 文件系统挂载的位置(目录) |
详细解释
udev 和 tmpfs:
udev: 提供对设备节点的访问,大小为 1.8g(虚拟内存,设备文件占用空间极小)。tmpfs::基于内存的临时文件系统,常用于系统运行时需要快速存储的地方(如 /run、/dev/shm)。
/dev/vda2
- 主分区:大小为 59g,其中已用 5.6g,剩余 51g,使用率 10%。
- 挂载在
/(根目录),即根文件系统,存储系统的主要内容(如操作系统、应用程序等)。
挂载点 tmpfs
多个 tmpfs 文件系统基于内存挂载,分别用于:
/dev/shm:提供共享内存。/run:存储运行时进程数据。/run/lock:提供锁文件的临时存储。/sys/fs/cgroup:linux 的控制组文件系统,用于资源限制和管理。
/dev/loopx
- 这些是只读的
loop设备,常用于snap软件包的挂载。 /snap/core18、/snap/core20等为snap平台的核心文件。/snap/lxd为lxd容器管理器的snap包。
/dev/vdb
- 这是一个独立的分区,大小为 20g,已用 45m,可用 19g,使用率仅 1%。
- 挂载在
/data,可用作额外的数据存储。
tmpfs (最后一行)
- 用于用户 id 为 1000 的临时文件存储(是当前登录用户的运行时目录 /run/user/1000)
2.finding占用空间的文件或目录
使用 du -sh /*、du -sh /var/*等类似的命令,逐层查找大文件或大目录,并定位具体占用空间的文件。
————此处最好使用linux最高权限用户root,否则会导致有些文件由于权限的原因无法进行读取信息。


这里需要我们进行一层一层的查询,确认最终哪个目录的哪个文件或者文件夹的磁盘占用最大的文件。
3.清理文件
删除无用日志文件或临时文件,比如使用命令rm -rf /var/log/*清理日志文件(但是最好将近期的日志文件进行拷贝到其他的地方,以便出现其他服务异常的时候,可以通过日志进行查询)。同时也可以根据实际需求对其他无用文件进行清理或迁移。
4.预防措施
设置日志轮转(logrotate)来自动管理日志文件,避免将来类似的问题,同时,可以设置磁盘空间报警,提前发现空间不足的问题。以此来提高系统的高可用性。
tips:
一、磁盘使用情况查询工具ncdu
ncdu 是一个基于 ncurses 的磁盘使用情况分析工具。它可以帮助您快速地查看文件系统中哪些文件或目录占用了较多的空间,并且以易于阅读的树状视图形式展示结果。
1. ncdu 的主要特点
直观的界面
- 基于
ncurses的终端界面,用户可以通过键盘导航文件系统结构,查看每个目录或文件的详细空间占用情况。
快速扫描与分析
- 使用高效的扫描算法,能够快速遍历大文件系统,并计算出每个目录或文件的空间占用。
易于操作
- 支持通过键盘快捷键进行文件排序、目录展开与折叠,以及直接删除不需要的文件或目录。
跨平台支持
ncdu可运行在大多数基于unix的系统(如linux和macos)上,并支持通过ssh在远程服务器上使用。
便携性
- 由于
ncdu是轻量级工具,占用资源少,非常适合在资源受限的环境(如小型服务器或嵌入式系统)中使用。
颜色编码
- 默认情况下,
ncdu使用颜色编码来区分文件类型和目录,使得输出更加直观。
灵活的选项
ncdu支持多种选项,比如排除某些目录、按照大小排序、以及导出和导入扫描结果。
2. 适用场景
- 磁盘空间清理:快速定位占用磁盘空间最多的文件或目录,帮助清理不必要的数据。
- 服务器维护:通过
ssh在远程服务器上运行ncdu,高效管理存储资源。 - 大文件系统分析:适合于分析复杂或多层级的文件系统,特别是磁盘配额不足的情况下。
3. 安装和使用
本次实机演示为ubuntu系统,后续的操作命令均是以其系统为主
在大多数 linux 发行版中,可以直接通过包管理器安装:
# debian/ubuntu sudo apt install ncdu # centos/rhel sudo yum install ncdu # macos (通过 homebrew) brew install ncdu

4. 基本用法
4.1 如何查看需要或适用的参数——help
ncdu --help 获取对应的帮助信息

ncdu <options> <directory>
这是您需要键入命令的格式
- <directory>:指定要扫描的目录。如果未提供,
ncdu默认扫描当前工作目录 - <options>:可选参数,用于调整扫描行为或界面显示
基本功能
-h, --help:显示帮助信息,列出所有支持的选项-v, -v, --version:输出 ncdu 的版本号-r:只读模式。在该模式下,用户无法通过 ncdu 删除文件或目录,适合希望避免误操作的场景
界面与显示
-q:启用安静模式(quiet mode)。扫描期间屏幕刷新间隔为 2 秒,适合在慢速网络或资源受限的环境中运行
-0, -1, -2:控制扫描时的用户界面显示
0:无界面模式,适合脚本或直接导出扫描结果1:基本界面2:完整 ncurses 界面(默认)
--si:使用十进制(基于 10 的 si 前缀)显示文件大小
- 例如:1 kb = 1000 字节
- 1 mb = 1000 kb,默认情况下,
ncdu使用二进制单位(1024 字节为 1 kb) --color scheme:指定颜色方案,可根据用户喜好自定义界面颜色。--confirm-quit:退出 ncdu 时要求确认,防止误操作导致退出。
文件和目录处理
-x:只扫描与目标目录相同的文件系统,忽略跨文件系统的目录或文件。例如,扫描/时不会跨越到挂载的/data分区。--exclude pattern:排除匹配指定模式的文件。例如:
ncdu --exclude '*.log' /var # 上述命令会扫描 /var 目录,但排除所有 .log 文件。
-x, --exclude-from file:从指定文件中读取排除模式。例如,文件exclude.txt内容如下:
*.log *.tmp
然后运行:
ncdu -x exclude.txt /var # 会排除所有 .log 和 .tmp 文件。
--exclude-caches:排除包含cachedir.tag的目录。这些目录通常是缓存文件存储目录(如浏览器缓存),排除它们可以加快扫描速度。-l, --follow-symlinks:跟随符号链接(仅限文件),但不会跟随指向其他目录的符号链接。
导入与导出
-o file:将扫描结果导出到指定文件。导出结果是压缩的二进制格式,适合后续分析。- 例如:
ncdu -o result.dat /path/to/directory -f file:从指定文件导入扫描结果。- 例如:
ncdu -f result.dat(这可以避免重复扫描大目录,直接查看之前导出的结果)。
4.2 基础使用 + 演示
4.2.1 扫描当前目录并显示结果
ncdu

4.2.2 扫描 /var 目录并排除 .log 文件
ncdu --exclude '*.log' /var

4.2.3 扫描 /data 并将结果导出到data_scan.dat
ncdu -o data_scan.dat /data

4.2.4 读取之前的扫描结果
ncdu -f data_scan.dat


4.2.5 只扫描根目录,不跨越到其他文件系统
ncdu -x /

4.2.6 排除缓存目录并显示文件大小单位为 si 前缀:
ncdu --exclude-caches --si /path/to/directory

4.2.7 设置颜色
ncdu --color dark /home

二、日志管理
通过配置logrotate,可以设置日志文件的轮转、压缩和删除时间点。
例如,在/etc/logrotate.d目录下,对某个日志文件进行配置,确保它按时归档和清理。
三、临时文件管理
linux系统中,/tmp 和 /var/tmp 目录通常用于存放临时文件。
定期清理这些目录的文件,或者设置 tmpwatch 来自动出除过期的临时文件,可以避免大量临时文件长期占用磁盘空间。
四、软链接和硬链接
有时候,多个文件其实是同样的数据,合理地使用硬链接可以减少实际占用的磁盘空间,同时,善用软链接也可以方便管理文件和目录结构。
五、磁盘配额
在多用户系统中,可以启用磁盘配额(quota),限制每个用户或用户组所能使用的磁盘空间,这可以有效防止单个用户因滥用磁盘空间而影响其他用户使用和系统正常运行。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论