当根 (/) 分区已满时,如何释放 Linux 中的空间

最常见的问题之一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 系统上的分区?您采取了哪些措施来修复它?在下面的评论中分享您的经验 - 您的提示可能会对社区中的其他人有所帮助!