当 Linux 磁盘满了,会导致系统无法正常运行,比如无法写入文件、服务停止、甚至系统崩溃。因此,快速排查并清理磁盘空间是非常重要的。以下是详细的排查和解决步骤:
使用 df
命令查看磁盘分区的使用情况:
bash
复制
df -h
-h
:以人类可读的格式显示(GB、MB)。plaintext
复制
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 45G 5G 90% /
/dev/sda2 100G 95G 5G 95% /home
如果某个分区(如 /
或 /home
)的 Use% 达到接近 100%,说明该分区已满。
du
查找占用最多的目录du
命令用于分析文件和文件夹的磁盘占用情况:
bash
复制
du -h --max-depth=1 /
-h
:以人类可读的格式显示。--max-depth=1
:只查看顶级目录的大小。plaintext
复制
5.0G /var
20G /home
15G /usr
1.2G /tmp
根据输出结果,进一步深入到占用空间较大的目录(如 /home
):
bash
复制
du -h --max-depth=1 /home
find
查找大文件查找超过 1GB 的大文件:
bash
复制
find / -type f -size +1G 2>/dev/null
-type f
:只查找文件。-size +1G
:查找大于 1GB 的文件。2>/dev/null
:忽略权限不足导致的错误。有时磁盘分区挂载错误可能导致文件写入到了根目录,而不是正确的挂载点:
bash
复制
mount
/mnt/data
)没有正确挂载,可能会导致根分区被写满。bash
复制
df -h
bash
复制
sudo mount /dev/sdX /mnt/data
清理磁盘空间时,应谨慎操作,避免删除系统关键文件。以下是常见的清理方法:
Linux 日志通常存储在 /var/log
中:
bash
复制
du -h /var/log
如果发现某些日志文件过大(如 syslog
或 journal
文件),可以清理或压缩:
bash
复制
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/auth.log
journal
日志对于使用 systemd
的系统(如 Ubuntu 和 CentOS 7+),日志可能存储在 journal
中:
bash
复制
journalctl --disk-usage
bash
复制
sudo journalctl --vacuum-time=7d
apt
缓存(适用于 Debian/Ubuntu)APT 会缓存已下载的软件包,占用大量空间:
bash
复制
sudo apt-get clean
yum
缓存(适用于 CentOS/RHEL)bash
复制
sudo yum clean all
临时文件通常存储在 /tmp
目录中,可以安全删除:
bash
复制
sudo rm -rf /tmp/*
在 Ubuntu/Debian 系统中,列出所有内核版本:
bash
复制
dpkg --list | grep linux-image
保留当前内核和最近的一个版本,其余都可以删除:
bash
复制
sudo apt-get autoremove --purge
对于 CentOS 系统:
bash
复制
sudo yum remove kernel-oldversion
使用 find
找到大文件后,确认是否不再需要这些文件,删除它们:
bash
复制
sudo rm -f /path/to/large-file
检查 /home
目录下的用户文件:
bash
复制
du -h --max-depth=1 /home
删除不需要的文件或备份到其他存储设备。
在 Debian/Ubuntu 系统中:
bash
复制
dpkg-query -W --showformat='${Installed-Size} ${Package}\n' | sort -n
在 CentOS/RHEL 系统中:
bash
复制
rpm -qa --qf '%10{SIZE}\t%{NAME}\n' | sort -n
例如,卸载某个软件包:
bash
复制
sudo apt-get remove --purge package-name
或:
bash
复制
sudo yum remove package-name
如果某些文件需要保留但不常用,可以压缩后存储:
bash
复制
tar -czvf backup.tar.gz /path/to/large-directory
然后将压缩文件移动到其他存储设备或云端。
定期监控磁盘使用
cron
定期运行 df
或 du
,并发送邮件报警: bash
复制
df -h | mail -s "Disk Usage Report" [email protected]
设置磁盘占用警告
/etc/fstab
中启用磁盘配额(Quota)功能,限制用户或目录的磁盘使用量。使用独立分区管理
/var/log
)、临时目录(/tmp
)、用户目录(/home
)分区分开,避免单个分区写满后影响整个系统。扩容磁盘
当 Linux 磁盘满了时,按照以下步骤操作:
df
和 du
定位问题分区和目录。通过上述方法,您可以快速释放磁盘空间并防止磁盘再次被占满。