azhdrake
(Azhdrake)
1
你好,
我在一台拥有 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 数据库也会占用空间。你的上传文件有多大?管理面板底部应该会显示相关信息。
azhdrake
(Azhdrake)
3
它不到 50MB,这完全不是一个大型或老旧的实例。正如我提到的,我考虑过将其移出主驱动器,但我认为这不是这里的主要问题。
如果您的上传文件约为 25MB,而 PostgreSQL 数据库约为 1GB,我怀疑 Discourse 正在创建您不需要的备份。请检查您的备份保留设置(管理员 > 设置 > 备份),查看当前的备份(管理员 > 备份),并删除任何不需要的备份。
算了。要是我记得您之前已经清理过就好了。
您可以检查常见位置中占用空间的情况:
du -sh /shared/*
du -sh /var/www/discourse/*
du -sh /var/www/discourse/public/*
azhdrake
(Azhdrake)
5
我复制了仅存的备份并将其从磁盘上移除后,将其删除。我现在只剩下 3.5 GB 的空间。
是的,抱歉,我刚刚更新了帖子,并附上了更新后的说明。
azhdrake
(Azhdrake)
7
此服务器没有 /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 正在运行。
azhdrake
(Azhdrake)
9
啊,这就说得通了。
在容器中,唯一超过 1GB 的文件是 /var/www/discourse/vendor/bundle/ruby/,大小为 2.1GB。
我补充一下:如果我在更新拉取之前清理镜像,空间就足够了;但当我尝试更新并再次拉取时,空间又不够了。所以新镜像几乎占用了 5GB 的空间。
你能展示一下那个 Docker 命令的输出吗?那个目录包含了所有的 Ruby gems,这个大小在我看来并不令人担忧。
Ed_S
(Ed S)
11
确实,请展示所有输出。我不建议你在容器内部四处查看——你的问题出在系统层面,应该从那里开始排查。不要只盯着你认为可能存在问题的地方,而要纵观全局。
首先,重启系统。你需要一个干净的文件系统和一个全新的系统状态。
接下来,参考这个之前的帖子以获取详细建议:
pfaffman
(Jay Pfaffman)
12
你是否运行过
./launcher cleanup
或者以其他方式清理过 Docker?
除非是最小的论坛,否则 25GB 的空间很难够用。
我的论坛是个小型论坛(基本上只有我一个人用),我使用一台 40GB 的 VPS 以确保安全,避免因为更新导致令人头疼的问题。
这是我拥有的三台 VPS 中唯一一台不使用 20GB 存储的。另外两台分别是带有 MySQL 和 PHP 后端的 HTTP 服务器,以及一台 RTMP 服务器。运行 Discourse 的那台同时也运行了 docker-mailserver,但我关闭了邮件摘要功能,因此 DMS 占用的资源非常少。
Steven
15
为了腾出一点空间,我使用这些命令,这有助于重建过程
sudo apt -y autoremove && apt -y autoclean
sudo apt clean
sudo journalctl --vacuum-time=1s
1 和 2 清理 Ubuntu
3 清理一些日志,通常能清理出大约 3GB 的空间
这在原帖中已经提到,但显然最好运行 Discourse 命令
azhdrake
(Azhdrake)
17
感谢大家的回复!抱歉之前消失了,生活中突发了一些事情,昨天我没有时间继续排查问题。
简而言之,我注意到关于这个确切问题的讨论帖非常多,因此我认为即使这次解决了,以后可能还会再遇到,所以我将我的实例迁移到了一个稍大一些的服务器上,该服务器有 35GB 的可用空间。
对于任何正在寻找解决此确切问题帮助且不想升级服务器的人:
我之前已经尝试过 ./launcher cleanup,但它释放的空间不够。我也已经执行过
sudo apt -y autoremove && apt -y autoclean
sudo apt clean
sudo journalctl --vacuum-time=1s
但同样,这还不够。journalctl 中有大量的日志(对于一台 25GB 的机器来说),所以请务必检查这是否也适用于你的情况,但对我而言,这并没有提供足够的帮助。