如何优化 Linux 上的存储空间

15 分钟阅读 - 2026年5月22日

hero section cover
目录
  • 如何优化 Linux 系统的存储空间
  • 查找占用磁盘资源的程序
  • 清理包缓存、日志和重复文件
  • 文件系统级优化
  • 存储维护自动化
  • 让每一千兆字节都物尽其用
分享

在 Linux 服务器上回收和优化磁盘空间的实用技术,从软件包缓存清理到文件系统调整和自动维护。

如何优化 Linux 系统的存储空间

多年来,面对磁盘空间不足的问题,默认的解决方案很简单:增加存储空间。当时存储成本低廉。但如今情况已然不同。自 2025 年末以来,受人工智能基础设施需求消耗全球产能的影响,NAND 闪存价格已大幅飙升。 仅在2026年第一季度,企业级SSD的合约价格就上涨了85%-90%,消费级NVMe硬盘的市价也大致翻了一番,而新的NAND生产能力预计要到2027年才能投产。

结果是:服务器上每GB存储空间的成本都比一年前更高,这使得优化现有资源比通过购买新设备来解决问题要划算得多。本文将介绍如何找出占用磁盘空间的元凶、清理这些数据,以及如何配置文件系统以更高效地利用存储空间。


 

查找占用磁盘资源的程序

首先运行 df -h 以获取所有已挂载文件系统的快照,包括总大小、已用空间及使用百分比。任何使用率超过 90% 的分区都需要关注。如有必要,请单独检查特定分区:

df -h /
df -h /boot

切勿忽略 inodes。文件系统可能存在可用空间却无可用 inodes,这会导致同样的故障。请使用 df -i.

如果 df 显示 100% 占用率但各项数据加总不符,则很可能是存在“幽灵文件”。这些文件已被删除,但仍被运行中的进程占用。除非该进程释放文件句柄,否则空间无法被回收。使用以下命令查找:

sudo lsof / | grep deleted

一旦确定了哪些文件系统压力较大,请使用 duncdu。若需快速检查或编写脚本, du 是理想工具:

du -h --max-depth=1 /var

添加 -x ,即可在从根目录开始扫描时保持在单一文件系统内,并跳过诸如 /proc。若要在远程服务器上进行交互式探索, ncdu 提供了一个可导航的文本界面,您可以在其中按大小排序并直接删除文件。

功能duncdu
界面静态命令行输出带方向键导航的交互式 TUI
最适合脚本编写和快速检查在远程服务器上手动探索
排序需要通过管道传输至 sort内置(按大小、名称等)
文件删除单独的 rm 命令内置(按 d)

清理包缓存、日志和重复文件

有三个领域始终占据着可回收空间的最大份额:软件包缓存、日志文件以及大文件或重复文件。

软件包缓存与孤立依赖项

每次安装或更新都会留下缓存的软件包文件。随着时间推移,这些文件会悄然堆积。请根据您的发行版进行清理:

任务Debian/Ubuntu (APT)Fedora/RHEL (DNF)Arch (Pacman)
清除缓存sudo apt cleansudo dnf clean allsudo paccache -r
移除孤立包sudo apt autoremovesudo dnf autoremovepacman -Rs $(pacman -Qdtq)
清除残留配置sudo apt autoremove --purge由 autoremove 处理不适用

请先使用 sudo apt autoremove --dry-run。旧内核在 Ubuntu 系统上可能占用 1.5GB 或更多空间。删除旧版本前,请务必保留当前运行的内核及一个备份版本。

若使用 Snap 或 Flatpak,这些组件也会累积修订版本和运行时文件:

sudo snap set system refresh.retain=2
flatpak uninstall --unused

/var/log 中的日志文件

日志文件是最常见的隐形磁盘空间消耗源。请优先查找体积过大的日志文件:

du -xhd1 /var/log | sort -h
find /var/log -type f -size +100M

对于 systemd 日志,请使用内置的 vacuum 工具,而非手动删除文件:

sudo journalctl --vacuum-size=500M

要设置永久限制,请编辑 /etc/systemd/journald.conf:

SystemMaxUse=500M
MaxRetentionSec=14day

对于仍被服务保持打开状态的活跃日志文件,请勿使用 rm。只要进程持有文件描述符,空间就不会被释放。请改用 truncate:

sudo truncate -s 0 /var/log/syslog

大文件与重复文件

查找整个系统中大于 500MB 的文件:

sudo find / -type f -size +500M -exec ls -lh {} +

对于重复文件, rmlint 采用基于哈希的比较来检测重复文件、空目录和损坏的符号链接。在删除任何内容之前,请仔细审查其输出结果,特别是在同一文件可能承担不同作用的服务器上。

文件系统级优化

清理文件后,您可以通过调整文件系统,在同一硬件上释放出更多可用空间。

减少 ext4 保留空间

默认情况下,ext4 会为根文件系统预留 5% 的空间。在 2TB 的数据分区中,这意味着有 100GB 处于闲置状态。在数据分区并非根文件系统的专用服务器上,您可以安全地减少此预留空间:

sudo tune2fs -m 1 /dev/sdXn

这将保留空间设置为 1%,对于大多数使用场景已足够。使用 tune2fs -l /dev/sdXn.

Btrfs 透明压缩

Btrfs 支持透明文件压缩,这是 ext4 和 XFS 所不具备的。使用 compress=zstd 参数挂载,即可在写入时自动压缩数据。ZSTD 能在速度与压缩率之间取得良好平衡。对于混合文件工作负载, compress-force=zstd 通过压缩通常会被启发式算法跳过的文件,可额外节省 10-20% 的空间。

要压缩 Btrfs 卷上的现有数据:

btrfs filesystem defragment -czstd /path/to/dir

在包含快照或引用链接的卷上操作时请务必谨慎。碎片整理会破坏写时复制关系,实际上可能增加磁盘使用率。

XFS 和 Btrfs 均支持 reflinks,该机制会创建共享物理块的文件副本,直到其中一个副本被修改为止。这对于克隆虚拟机磁盘映像或容器层非常有用,且不会使存储消耗翻倍:

cp --reflink=always source.img clone.img

LVM 薄 Provisioning

LVM 薄 Provisioning 允许您分配超过物理空间的逻辑空间,仅在写入数据时才消耗实际磁盘空间。当运行多个虚拟机或容器时,这非常有用——每个虚拟机或容器都需要自己的逻辑卷,但不会同时填满所有卷。

为防止精简池空间耗尽,请在 /etc/lvm/lvm.conf 中启用自动扩展 thin_pool_autoextend_thresholdthin_pool_autoextend_percent.

存储维护自动化

手动清理只能解决一次问题。而自动化清理则能在您下次登录之前,始终保持磁盘的健康状态。使用 systemd 定时器 cron 。它们会将输出日志 journalctl ,并 Persistent=true 会在重启后补上错过的运行。

任务工具频率
日志轮换logrotate每日或每周
日志清理journalctl --vacuum-time每周
包缓存清理apt clean / dnf clean all每月
临时文件清理systemd-tmpfiles每日
Docker 清理docker system prune每周
磁盘使用情况监控自定义脚本 + systemd 定时器每 15-30 分钟

Docker 值得特别关注。容器日志可能会在没有任何明显警告的情况下不断增长。通过编辑 /etc/docker/daemon.json。设置 max-sizemax-filelog-opts 键下设置和,以防止单个容器占满磁盘空间。

为了主动监控,请设置两级警报系统:磁盘使用率达到 80% 时发出警告,达到 90% 时发出严重警报。每小时记录磁盘使用情况,以便您跟踪增长趋势并预测分区何时会达到容量上限:

0 * * * * df --output=source,size,used,pcent >> /var/log/disk_usage.csv

另一项防护措施:挂载 /var, /tmp,并 /home 分别挂载在不同的分区上。这样可以防止失控的日志或用户数据占用根文件系统,从而导致整个系统崩溃。

让每一千兆字节都物尽其用

随着存储价格持续攀升,且预计要等到 2027 年新的 NAND 产能投产后才能缓解,优化现有资源不仅是一种良好实践,更能切实节省成本。方法很简单:

  • 使用 df, du,并 ncdu 在进行任何更改前。
  • 清除软件包缓存、轮换日志并删除重复数据,以立即回收空间。
  • 调整文件系统。减少 ext4 预留块、启用 Btrfs 压缩,或使用 LVM 精简配置,从而在现有硬件上获得更高利用率。
  • 利用 systemd 定时器实现维护自动化,确保在两次检查之间磁盘始终保持整洁。
  • 监控使用趋势,并在 80% 和 90% 阈值设置警报,以便及早发现问题。

如果您需要配备高性能 NVMe 存储的专用服务器基础设施,FDC 的专用服务器正是为此而打造。

博客

本周特色

更多文章
为什么必须拥有功能强大且不计量的 VPS

为什么必须拥有功能强大且不计量的 VPS

需要可靠的性能和无限的流量?功能强大的非计量 VPS 可提供您所需的速度、可扩展性和带宽,而无需担心使用限制。

3 分钟阅读 - 2025年5月9日

如何优化 Linux 上的存储空间

15 分钟阅读 - 2026年5月22日

更多文章