磁盘空间已满,无法更新 Discourse 实例

你好,

我在一台拥有 25GB 空间的服务器上运行着一个小型 Discourse 实例。目前只剩下 3.4GB 的可用空间,我不确定原因。这导致我无法进行更新。

除了 Discourse 之外,该实例上没有运行其他服务,以前也没有过。

为了释放空间,我目前已经做了以下操作:

  • 删除了所有能找到的日志,包括 Discourse 日志和 /var/log/journal 中的日志
  • 删除了除一个之外的所有 Discourse 备份
  • 清理了所有旧的 Docker 镜像
  • 运行了 apt-get autoclean 和 apt-get autoremove
  • 确保没有遗留旧内核

我曾考虑将 PostgreSQL 数据移动到外部驱动器,但目前它不到 1GB,所以我认为这样做帮助不大。

/dev/vda1 正在占用 20GB 的空间。

我还能做些什么吗?25GB 的磁盘空间现在是否已不足以运行 Discourse?

这主要取决于你的上传文件,但如果你的站点非常大(听起来这似乎不是问题所在),备份和 PostgreSQL 数据库也会占用空间。你的上传文件有多大?管理面板底部应该会显示相关信息。

它不到 50MB,这完全不是一个大型或老旧的实例。正如我提到的,我考虑过将其移出主驱动器,但我认为这不是这里的主要问题。

如果您的上传文件约为 25MB,而 PostgreSQL 数据库约为 1GB,我怀疑 Discourse 正在创建您不需要的备份。请检查您的备份保留设置(管理员 > 设置 > 备份),查看当前的备份(管理员 > 备份),并删除任何不需要的备份。

算了。要是我记得您之前已经清理过就好了。

您可以检查常见位置中占用空间的情况:

du -sh /shared/*
du -sh /var/www/discourse/*
du -sh /var/www/discourse/public/*

我复制了仅存的备份并将其从磁盘上移除后,将其删除。我现在只剩下 3.5 GB 的空间。

是的,抱歉,我刚刚更新了帖子,并附上了更新后的说明。

此服务器没有 /shared/ 目录。

以下是我从 du -sh /var/discourse/* 得到的结果,总共只有 658M:

4.0K    /var/discourse/LICENSE
12K     /var/discourse/README.md
4.0K    /var/discourse/bin
4.0K    /var/discourse/cids
8.0K    /var/discourse/containers
12K     /var/discourse/discourse-doctor
8.0K    /var/discourse/discourse-setup
368K    /var/discourse/image
8.0K    /var/discourse/install-discourse
28K     /var/discourse/launcher
32K     /var/discourse/samples
8.0K    /var/discourse/scripts
657M    /var/discourse/shared
180K    /var/discourse/templates

文件系统中占用空间最大的是 /var/lib/containerd/io.containerd.content.v1.content,占用 2.4 GB,以及 /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs,占用惊人的 12 GB

抱歉,忘了提你需要在容器内操作。你提到的那个文件来自 Docker。你可以用 docker system df 查看它被什么占用,如果有需要,可以用 docker system prune 进行全局清理,但请确保操作时 Discourse 正在运行。

啊,这就说得通了。

在容器中,唯一超过 1GB 的文件是 /var/www/discourse/vendor/bundle/ruby/,大小为 2.1GB。

我补充一下:如果我在更新拉取之前清理镜像,空间就足够了;但当我尝试更新并再次拉取时,空间又不够了。所以新镜像几乎占用了 5GB 的空间。

你能展示一下那个 Docker 命令的输出吗?那个目录包含了所有的 Ruby gems,这个大小在我看来并不令人担忧。