前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Ubuntu系统/目录使用率过高问题分析

Ubuntu系统/目录使用率过高问题分析

原创
作者头像
空洞的盒子
发布2025-02-08 18:02:57
发布2025-02-08 18:02:57
3190
举报
文章被收录于专栏:JD的专栏JD的专栏

问题现象

Ubuntu系统根目录使用率突然超过90%,但是在/目录下没有发现大体积的文件或日志。

分析思路

1. 查看磁盘占用情况

1.1 使用df命令查看磁盘信息

代码语言:bash
复制
df -h

1.2 使用du命令查找占用空间最多的目录

代码语言:bash
复制
du -ahx / | sort -rh | head -50

参数说明:

  • -a 显示所有文件
  • -h 以可读格式显示
  • -x 仅检查当前挂载点,避免跨挂载
  • sort -rh | head -50 显示 前 50 个 最大的文件/目录

2. 释放被 “deleted” 进程占用的空间

如果有文件被删除,但是某个进程仍然占用它,磁盘空间不会释放。

2.1 使用lsof命令查看进程资源占用情况

代码语言:bash
复制
lsof | grep deleted

重点关注 "/var/log/","/tmp" 相关的进程。

确认相关进程后,可以重启服务,强制释放资源。

代码语言:txt
复制
systemctl restart <服务名>

返回结果说明:

代码语言:bash
复制
apache2   1234   www-data  4r   REG  8,1  10485760  1234567  /var/log/apache2/access.log (deleted)
mysqld    5678   mysql     6u   REG  8,1  524288000  9876543  /tmp/mysql.XX123456 (deleted)

字段

含义

COMMAND

进程名称(apache2、mysqld)

PID

进程 ID(1234、5678)

USER

进程所属用户(www-data、mysql)

FD

文件描述符(4r、6u)

TYPE

文件类型(REG 表示常规文件)

DEVICE

设备号(8,1)

SIZE/OFF

文件大小(10485760 = 10MB,524288000 = 500MB)

NODE

文件的 inode 号

NAME

文件路径(后面带 (deleted) 说明已被删除)

分析:

  • 即使rm删除了文件,它仍然会占用空间,直到进程关闭该文件。
  • /var/log/ 和 /tmp/ 目录下的文件最容易出现这种情况。

3. 清理不必要的文件

3.1 清理 journalctl 日志

代码语言:bash
复制
journalctl --vacuum-size=100M

或者限制保留 5 天的日志:

代码语言:bash
复制
journalctl --vacuum-time=5d

3.2 清理 /var/log/ 目录

代码语言:bash
复制
du -sh /var/log/*
rm -rf /var/log/*.gz /var/log/*.1

4. 清理 snap空间

代码语言:txt
复制
sudo snap list --all
sudo snap remove <旧版本>
sudo snap set system refresh.retain=2  # 仅保留 2 个版本

5.删除apt缓存

代码语言:bash
复制
apt clean
apt autoclean

清理软件包:

代码语言:bash
复制
apt autoremove

6.LVM逻辑卷的快照(Snapshot)占用空间

LVM快照(snapshot)会占用大量磁盘空间,如果快照没有及时删除,磁盘可能会被占满。

6.1 检查LVM快照

代码语言:bash
复制
lvs

返回样例:

代码语言:bash
复制
  LV          VG         Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ubuntu-lv   ubuntu-vg -wi-ao---- 100.00G                                           
  snap-lv     ubuntu-vg swi-a-s---  10.00G ubuntu-lv 90.00                                

如果有类似 snap-lv 这样的 snapshot 逻辑卷,并且 Data% 接近 100%,说明快照占用了大量空间。

6.2 删除LVM快照

代码语言:bash
复制
lvremove /dev/ubuntu-vg/snap-lv

然后确认LVM逻辑卷的空间是否释放

代码语言:bash
复制
vgs
lvs
df -h

7.检查挂载点下的隐藏占用

如果某个目录(如 /mnt、/home、/data)被单独挂载了一个分区,但你在未挂载状态下删除了大量数据或者生成了大量数据,空间仍可能被持续占用。

7.1 检查挂载情况

代码语言:bash
复制
mount | column -t

如果 /mnt 或 /home 等目录挂载了其他分区,则需要临时取消挂载,然后检查原本的 /mnt 或 /home 目录下是否有残留的大文件

代码语言:bash
复制
umount /mnt
du -sh /mnt/*

如果发现有大文件,可以进行备份,然后手动删除:

代码语言:bash
复制
 rm -rf /mnt/*

然后重新挂载相应分区或Filesystem:

代码语言:bash
复制
mount -a

8.inode被占满

如果inode(文件索引)被用完,系统仍然可能报告磁盘使用率高。

8.1 检查inode使用情况

代码语言:bash
复制
df -i

如果 Use%接近100%,说明inode已满。

8.2 查找inode占用最多的目录

代码语言:bash
复制
find / -xdev -type d -exec bash -c 'echo -n "{}: "; find "{}" -type f | wc -l' \; | sort -nr | head -10

如果发现如果 /var/spool/、/tmp/ 或 /var/lib/docker/ 里有大量小文件,可以进行清理。清理后重新检查inode是否释放。

代码语言:bash
复制
rm -rf /var/spool/*
rm -rf /var/lib/docker/containers/*

9.检查swap交换分区是否占用LVM空间

如果当前系统的swap交换分区是基于LVM创建的,则可能会占用/dev/mapper/ubuntu--vg-ubuntu--lv的空间。

9.1 检查swap是否占用LVM

代码语言:bash
复制
swapon --show

样例返回:

代码语言:bash
复制
NAME                      TYPE      SIZE   USED  PRIO
/dev/mapper/ubuntu--vg-swap_1 partition 8G    4G    -2

如果swap过大,并且不需要那么多交换空间,我们可以进行适当的减小或者移除swap,然后重新确认磁盘空间。

代码语言:bash
复制
swapoff -a
lvreduce -L 2G /dev/mapper/ubuntu--vg-swap_1
mkswap /dev/mapper/ubuntu--vg-swap_1
swapon -a 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题现象
  • 分析思路
    • 1. 查看磁盘占用情况
      • 1.1 使用df命令查看磁盘信息
      • 1.2 使用du命令查找占用空间最多的目录
    • 2. 释放被 “deleted” 进程占用的空间
      • 2.1 使用lsof命令查看进程资源占用情况
    • 3. 清理不必要的文件
      • 3.1 清理 journalctl 日志
      • 3.2 清理 /var/log/ 目录
    • 4. 清理 snap空间
    • 5.删除apt缓存
    • 6.LVM逻辑卷的快照(Snapshot)占用空间
      • 6.1 检查LVM快照
      • 6.2 删除LVM快照
    • 7.检查挂载点下的隐藏占用
      • 7.1 检查挂载情况
    • 8.inode被占满
      • 8.1 检查inode使用情况
      • 8.2 查找inode占用最多的目录
    • 9.检查swap交换分区是否占用LVM空间
      • 9.1 检查swap是否占用LVM
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档