
您的网站宕机、电子邮件停止工作或您无法上传文件。共享虚拟主机上最常见的原因之一是磁盘配额已满或 Inode 限制。如果您知道正确的步骤,这是可以修复的。本文解释了磁盘配额和 Inode 之间的区别、如何识别原因,以及如何有效地清理您的 DirectAdmin 虚拟主机账户。
磁盘配额 vs Inode — 有什么区别?
磁盘配额 — 总数据大小
磁盘配额是指您在虚拟主机账户上可以存储的总数据大小的限制,以 MB 或 GB 为单位。当您超过此限制时,系统将拒绝写入任何新文件。写入缓存文件或日志的 PHP 应用程序将立即开始生成错误。
Inode — 文件数量
Inode 是 Linux 上的一个数据结构,存储关于文件或目录的元数据。每个文件和文件夹恰好使用一个 inode,即使是零字节文件也是如此。如果您在填满磁盘空间配额之前达到 inode 限制,服务器将无法创建任何新文件。
常见示例:W3 Total Cache 或 WP Super Cache 等 WordPress 缓存插件将缓存文件存储在 wp-content/cache/ 中。访问量大的网站可能会积累数十万个微小缓存文件,即使磁盘空间看起来充足,也会耗尽 inode 限制。
什么是 Inode 及其为什么在空间剩余时填满
最常见的问题是"我仍然有几 GB 的可用空间,所以为什么我的网站无法写入文件?"答案在于 Linux 文件系统的工作原理。Linux 使用称为 inode(索引节点)的结构来存储每个文件的元数据:其所有者、权限、最后修改时间和实际数据在磁盘上的位置。每个文件和每个文件夹总是使用恰好一个 inode,无论该文件是 0 字节还是 500 MB。
这意味着您的虚拟主机配额有两个完全独立的维度。第一个是"磁盘空间",以数据的总大小衡量。第二个是"inode 数量",以文件和文件夹的总数量衡量。拥有几个大型视频文件的网站可能会消耗大量空间,但 inode 很少。相反,拥有数十万个微小文件的网站可能会在只使用几百 MB 实际空间的情况下耗尽 inode 配额。当 inode 先耗尽时,服务器会立即拒绝创建新文件,即使磁盘空间条还远未满。
什么产生大量的小文件
推动 inode 数量最快增长的来源通常是网站所有者从未看到的自动后台进程:
- CMS 缓存文件 — WordPress、Magento 或 PrestaShop 为每个页面创建单独的缓存文件。拥有数千个页面的网站最终会有数千到数十万个缓存文件。
- PHP 会话 — 每个访问者都可能导致 PHP 创建
sess_*文件。如果不清理,这些每天会累积数千个。 - 邮箱消息 — Maildir 格式将每封电子邮件存储为单个文件。有 50,000 条消息的邮箱等于 50,000 个 inode。
- 图像缩略图 — WordPress 为每个原始图像生成多个尺寸。上传 2,000 张照片可以转化为近 10,000 个图像文件。
- node_modules / Composer vendor — 单个项目的依赖项文件夹可以包含数十万个嵌套文件。
如何检查 DirectAdmin 中的使用情况
DirectAdmin 中有两个主要检查位置:
1. 账户摘要仪表板
DirectAdmin 主屏幕显示磁盘空间和 Inode 的使用条形图,以及消耗的百分比。如果任一项超过 90%,请立即采取行动。
2. 磁盘使用工具
- 转到 系统信息和文件 → 磁盘使用情况
- 选择要分析的目录
- 该工具列出按大小从最大到最小排序的文件夹
通过命令行查找最大的文件
如果您有 Shell 访问权限,这些命令可以精确定位最大的空间消耗者:
查找最大的目录
du -sh /home/username/* | sort -rh | head -20
查找最大的个人文件
find /home/username -type f -size +50M -exec ls -lh {} \; | sort -k5 -rh | head -20
计算目录中的文件(检查 inode)
find /home/username/public_html -type f | wc -l
查找消耗最多空间和 Inode 的内容
在删除任何内容之前,您需要知道罪魁祸首在哪里。猜测通常会删除错误的东西或遗漏真正的原因。系统的方法是从最大的文件夹逐级下钻,分别查看两个维度 — 大小和文件计数 — 因为消耗您空间的东西通常不是消耗您 inode 的东西。
使用 du 按大小深入分析
从账户根目录开始,每次进入最大的文件夹,直到找到真正占用空间的来源:
du -sh /home/username/public_html/* | sort -rh | head -15
当某个文件夹看起来异常大(例如 wp-content)时,对其内部运行同样的命令,以找出哪个子文件夹是来源。
按文件夹统计 Inode 数量
如果磁盘空间仍然充足但 inode 接近满,则统计每个子文件夹的文件数量,找出创建文件最多的那个:
| 目标 | 命令 |
|---|---|
| 统计每个子文件夹中的文件数量 | for d in */; do echo "$(find "$d" -type f | wc -l) $d"; done | sort -rn |
| 统计账户中所有文件数量 | find /home/username -type f | wc -l |
| 查看系统剩余 inode 数量 | df -i /home |
专项检查缓存、日志和邮件
这三个来源始终是首要嫌疑。逐一检查:
find . -type d -name cache -exec sh -c 'echo "$(find "$1" -type f | wc -l) $1"' _ {} \;
ls -lh public_html/error_log
du -sh ~/imap/* 2>/dev/null | sort -rh | head
第一行找出任意深度下所有名为 cache 的文件夹及其文件数,第二行显示 error_log 的大小(可能增长到数 GB),最后一行显示哪个邮箱占用空间最多。如果您没有 Shell 访问权限,所有这些也可以通过 DirectAdmin 中的磁盘使用情况和文件管理器进行检查——只需按显示的大小顺序打开文件夹即可。
通常占用最多空间的文件
- WordPress 缓存 —
wp-content/cache/可以安全地完全删除 - WordPress 备份 — 备份插件将 zip 归档存储在
wp-content/backups/中 - 错误日志 —
error_log和access_log文件在没有轮转的情况下会无限增长 - 垃圾邮件 — 被数千条垃圾邮件淹没的收件箱
- 会话文件 —
/tmp/sess_*中过时的 PHP 会话文件 - 未使用的主题/插件 — 已停用但未删除的 WordPress 主题和插件
通过 DirectAdmin 文件管理器删除 WordPress 缓存
- 打开 DirectAdmin → 文件管理器
- 导航到
public_html/wp-content/cache/ - 选择
cache/内的所有文件和子文件夹(保留缓存文件夹本身) - 点击删除
如何减少空间和 Inode 使用量
一旦知道问题所在,下一步是减少实际负载,而不是只删除一次后又让其重新填满。将工作分为三个主要领域:缓存、邮件和图像。
1. 清理并控制缓存
缓存是临时的;删除是安全的,当访客到来时会自动重建。您应该做的事情:
- 通过文件管理器删除
wp-content/cache/内的所有内容,或使用插件中的"清除缓存"按钮。 - 将缓存插件配置为最多保留 24–48 小时的文件。不要设置数周的 TTL。
- 如果您使用基于文件的对象缓存,请切换到内存后端(如您的主机支持 Redis),以避免创建大量小文件。
- 删除某些插件留下的调试/日志文件残留,例如
wp-content/debug.log。
2. 管理邮件以回收 Inode
每封邮件都是一个文件和一个 inode。从未清理的邮箱是最大的隐性 inode 消耗者:
- 打开 Webmail,完全清空垃圾邮件和已删除文件夹。
- 将系统设置为每 30 天自动删除已删除的邮件。
- 使用 IMAP 而非 POP3,并在下载后启用从服务器删除,以防止邮件在各设备上累积。
- 如果有不再使用的旧邮件账户,请备份其数据并删除该账户。
3. 优化图像和媒体
图像通常同时消耗空间和 inode(来自多个缩略图尺寸):
- 使用 Smush 或 ShortPixel 等插件在上传前压缩图像,或手动将每张图像保持在 200 KB 以下。
- 通过禁用主题从未使用的尺寸来减少 WordPress 生成的缩略图数量。
- 将图像转换为 WebP 格式,可将文件大小减少 25–35%。
- 删除媒体库中未使用的媒体,清除与当前内容无关的旧上传文件。
提示:删除大量文件后,刷新 DirectAdmin 中的账户摘要页面。使用量数值可能更新缓慢,大约需要 1–4 小时,因为系统是分批重新计算配额,而非实时计算。如果数字没有立即下降,请不要惊慌。
防止将来 Inode 耗尽
- 将缓存插件配置为每 24–48 小时自动清除
- 添加 Cron 任务以删除旧会话文件:
find /tmp -name "sess_*" -mtime +1 -delete - 启用日志轮转,使 error_log 永远不会超过 10 MB
- 将备份迁移到 Google Drive 或 Dropbox 等云端,远离服务器
- 立即删除未使用的主题和插件,而不仅仅是停用它们
防止问题复发及何时升级计划
清理文件只是治标。没有预防系统,问题会在几周内再次出现。预防的关键是让"日常维护"自动进行,并定期关注使用趋势。
设置自动清理
- 添加 Cron 任务每晚删除旧会话:
find /tmp -name "sess_*" -mtime +1 -delete - 添加 Cron 任务清除超过 2 天的缓存:
find ~/public_html/wp-content/cache -type f -mtime +2 -delete - 启用日志轮转,使
error_log永远不会超过 10 MB,且只保留几个备份。 - 将备份插件配置为只保留 1–2 个本地归档,其余发送到云端。
关注使用趋势
至少每月一次检查 DirectAdmin 账户摘要页面上的磁盘空间和 Inode 条,并记录数值以便随时间比较。如果即使清理后每月数字仍在持续上升,则说明您的网站确实在增长——而不只是在积累垃圾。这就是在触及上限之前提前规划更多空间的信号。
何时升级优于清理
当以下任何情况适用时,考虑升级您的计划:
| 信号 | 含义 |
|---|---|
| 清理后 2–3 周内仍超过 80% | 实际使用量超出计划,而不只是垃圾 |
| 尽管有 Cron 清理任务,inode 仍频繁填满 | 文件数量超出 inode 配额 |
| 必须删除真实内容才能腾出空间 | 没有垃圾可删——您需要更多空间 |
| 网站因产品/用户/图像而快速增长 | 在触及限制之前提前扩展 |
升级 AsiaGB 虚拟主机计划是即时的——无需迁移,数据不会丢失。您同时获得更多 SSD 空间和更高的 inode 配额,因此不再需要花时间持续清理文件。
常见问题
磁盘空间充足,但为什么无法写入文件?
这几乎总是因为 inode 在磁盘空间之前耗尽。大量小文件(如缓存、会话或电子邮件)会耗尽 inode 配额。检查 DirectAdmin 账户摘要页面上的 Inode 条形图。如果接近 100%,删除不必要的小文件,服务器将立即能够再次写入新文件。
我可以删除整个缓存文件夹吗?安全吗?
您可以安全地删除缓存文件夹内的文件,但保持缓存文件夹本身。当访问者到达时,系统会自动重建缓存文件。删除缓存不会删除您的网站内容或数据库;这些只是用于改进速度的临时文件。
电子邮件占用太多空间和 inode。我应该怎么办?
清空 Webmail 中的垃圾箱和垃圾文件夹,将垃圾箱设置为每 30 天自动删除,并使用 IMAP 而不是 POP3,以便邮件不会在多个设备上堆积。如果您有数千条垃圾邮件,全选并一次性删除,以回收 inode。
什么时候应该升级我的虚拟主机计划?
如果清理后几周内磁盘或 inode 使用情况仍然超过 80%,或者您的网站由于更多产品、图像或用户而真正增长,是时候升级了。升级 AsiaGB 虚拟主机计划是即时的,不需要迁移,数据不会丢失。