最常见的问题之一Linux用户面临的问题,特别是在磁盘空间有限的系统上,root分割(/)完全充满。
发生这种情况时,您可能会遇到如下错误:
No space left on device
不要恐慌!它只是意味着你的根目录(/分区)已满,这是一个常见问题,尤其是在磁盘空间有限的系统或 24/7 运行的服务器上。
发生这种情况时,您可能会遇到以下问题:
- 无法安装或升级软件包。
- 无法启动系统。
- 服务未启动。
- 未写入日志或临时文件。
在本文中,我们将引导您完成确定问题的实际步骤,,并防止这种情况再次发生。这些说明适合初学者和中级用户。
第一步是使用以下命令确认问题,这将显示根分区上已使用和可用的空间。如果用法是100%,是时候采取行动了。
df -h /
现在让我们找出哪些文件夹占用的空间最多。
sudo du -h --max-depth=1 / | sort -hr
这将显示下面的顶级目录/按大小排序。
/var /usr /home /tmp /opt
一旦确定了最大的目录,您就可以进一步检查它,例如,如果/var很大:
sudo du -h --max-depth=1 /var | sort -hr
步骤 2:清理 Linux 中的包缓存
当您安装或更新软件时,Linux将下载的包文件存储在本地缓存中。随着时间的推移,该缓存可能会变得非常大,尤其是当您的系统执行频繁更新或安装时。
清理此缓存是释放空间的安全有效的方法。
sudo apt clean # For Debian/Ubuntu sudo dnf clean all # For RHEL-based
这些命令从以下位置删除所有缓存的包文件/var/cache/apt/archives/(为了) 和/var/cache/dnf/(为了),它会随着时间的推移而累积并消耗大量空间。
步骤 3:删除 Linux 中的旧内核
当您的系统安装内核更新时,它通常会保留旧版本,以便在新版本失败时进行恢复。随着时间的推移,这会消耗大量空间,尤其是在/boot,容量有限。
要释放 Linux 系统上的空间,最好删除旧的、未使用的内核。但是,切勿删除当前正在运行的内核,因为系统需要它才能正常启动和运行。
首先,检查当前运行的内核版本。
uname -r
然后列出所有已安装的内核:
dpkg --list | grep linux-image # For Debian/Ubuntu rpm -q kernel # For RHEL-based
一旦确定不再需要哪些内核版本,您就可以删除它们。例如,删除版本5.15.0-88-通用在乌班图。
sudo apt remove --purge linux-image-5.15.0-88-generic
继续:
sudo dnf remove kernel-4.18.0-305.el8.x86_64
删除后,更新引导加载程序。
sudo update-grub
删除旧内核后,运行此命令来清理剩余的包和依赖项:
sudo apt autoremove # For Debian/Ubuntu sudo dnf autoremove # For RHEL-based
步骤 4:清除 Linux 中的日志文件
Linux 在日志文件中保存系统活动和事件的记录/var/log目录和这些日志可以帮助系统管理员解决问题,,并了解系统性能。
但随着时间的推移,它们可能会变得非常大,尤其是在以下情况下:
- 服务反复崩溃
- 系统不断记录调试或错误消息
- 磁盘空间不足,日志不断堆积
如果你的根分区/已满,日志很可能占用了大量空间。清理或缩小这些日志文件可以立即释放一些喘息空间,让您的系统恢复正常。
首先,运行以下命令查看每个日志文件或文件夹使用了多少空间:
sudo du -sh /var/log/*
一旦您知道哪些日志文件是最大的罪魁祸首,您就可以截断日志文件,这意味着清除其内容而不删除实际文件。
sudo truncate -s 0 /var/log/syslog sudo truncate -s 0 /var/log/kern.log sudo truncate -s 0 /var/log/auth.log
如果您的系统使用(常见于 systemd 系统),使用以下方式清理日志:
sudo journalctl --vacuum-time=7d
这将仅保留最近 7 天的日志。
第 5 步:在 Linux 中清理 Docker(如果已安装)
如果您正在使用码头工人,由于图像、容器和卷,它可能会使用大量空间。
检查 Docker 空间使用情况:
docker system df
删除未使用的 Docker 数据:
docker system prune -a
请注意:这将删除所有未使用的映像、容器和卷。
步骤 6:完整根分区的实时 USB 救援方法
如果系统完全满并且没有响应,您可以使用 Live USB 启动到 Live Linux 环境并挂载根分区。
sudo fdisk -l sudo mount /dev/sda1 /mnt # Replace sda1 with your actual root partition
浏览文件系统并删除不需要的大文件。
cd /mnt sudo du -sh var/* sudo rm -rf var/log/*
删除文件时要小心 – 避免删除关键的系统文件。
防止将来出现此问题
以下是避免填满根分区的一些最佳实践:
- 使用单独的分区– 创建单独的分区
/var,/home, 和/tmp在安装过程中。 - 监控磁盘使用情况– 设置简单的监控工具,例如迅速的,,或电子邮件警报,在磁盘使用率较高时通知您。
- 安排定期清理– 创建 cron 作业来定期清理日志和缓存。
- 避免将大文件存储在 /– 将备份文件、下载内容和媒体存储在已安装的外部驱动器或单独的数据分区上。
如果您尝试清理 Linux 根分区,但它不断被填满,则可能是时候增加根分区的大小了(/)分割。扩展根分区可为您的系统提供更多空间来容纳应用程序、日志和数据。
查看我们的详细指南:
概括
当根分区填满时,可能会导致严重的问题,从软件包安装失败和服务崩溃到日志记录错误,甚至系统启动失败。幸运的是,通过正确的命令集和一些仔细的清理,您可以恢复空间并使系统恢复正常,而无需重新安装。
你有没有遇到过完整的root(/)Linux 系统上的分区?您采取了哪些措施来修复它?在下面的评论中分享您的经验 - 您的提示可能会对社区中的其他人有所帮助!
