Discourse升级因25G droplet磁盘空间不足而失败

18G /var

du -h -s /var/* | sort -h -r
14G     /var/lib
2.8G    /var/log
933M    /var/discourse
du -h -s /var/lib/* | sort -h -r
13G     /var/lib/docker
744M    /var/lib/snapd
root@DO-Discourse:/var/discourse# du -h -s /var/lib/docker/* | sort -h -r
13G     /var/lib/docker/overlay2
16M     /var/lib/docker/image
root@DO-Discourse:/var/discourse# du -h -s /var/lib/docker/overlay2/* | sort -h -r
8.7G    /var/lib/docker/overlay2/d319d95263d87c2a75a4bc9a9f03a25ea7f6eb1f7bac687e7ae7d45522939dc0
2.8G    /var/lib/docker/overlay2/79be56509f1588c272683332ef50abd54f0aeb06d0e2d13f8eea1bace3b3db46
873M    /var/lib/docker/overlay2/5b148cbbcca894be512c7407568104cd7b2e3d48ab7b7d74c6c0f731806cdddc

继续深入还有意义吗?

删除了 2.8G 的日志,但只腾出了 4.9G 的空间。没有“测试”实例来尝试 ./launcher rebuild app --skip-prereqs

还有其他建议吗?

现在无法在 25G 的 droplet 上运行 discourse 实例了吗?

请参阅 Prune unused Docker objects | Docker Docs 的末尾。
我认为您想清理所有内容并清理卷。

docker system prune --volumes
警告!这将删除:
  - 所有已停止的容器
  - 所有未被至少一个容器使用的网络
  - 所有未被至少一个容器使用的卷
  - 所有悬空镜像
  - 所有悬空构建缓存

您确定要继续吗? [y/N] y
总共回收空间:0B
root@DO-Discourse:/# 

还有其他建议吗?

你有什么要用的 Snap 吗?

不一定,这足以说明你的容器占用了 Docker 的空间。清理后,我的数字与你的非常相似,这或许(但不一定)表明它只是使用了多少。

我确实在 25GB 的 Linode 上遇到过问题,但那是在有 500MB+ 的备份时,删除两三个备份后,我有了足够的空间进行重建。我选择升级到 50GB 的下一级,因为它只会变得更加受限,而且我想每月进行一次计划性重建。

那是在切换到 Ember CLI 之前,那是否会让东西变得大很多?

那个 9GB 的覆盖层似乎是问题所在。但我检查了另一个实例,上面有一个类似大小的覆盖层。25GB 的实例一直都很有挑战性。我建议你下定决心,购买更多的 SSD。接下来你可以尝试看看是否可以移除操作系统级别的(日志、不需要的程序、find 的索引,也许吧?)。

另一个想法是启动一个新的 25GB 虚拟机并迁移到那里,希望之前填满旧实例的东西这次不会成为问题。

这些答案似乎都不太令人满意。在过去一两周里,我帮助管理的一两个实例上,我曾努力应对 25GB 的配置,但我认为你已经做了我所做的一切。

3 个赞

不确定。我是否需要它来进行仅 discourse 安装?如果不需要,我该如何删除它?

我不这么认为 :thinking:
完整备份下载后,您可以运行 snap list 来检查安装了哪些 snap,如果没有,则运行 sudo apt purge snapd

root@DO-Discourse:/var/discourse# snap list
Name    Version        Rev    Tracking       Publisher   Notes
core18  20220309       2344   latest/stable  canonical✓  base
core20  20220304       1376   latest/stable  canonical✓  base
lxd     4.0.9-8e2046b  22753  4.0/stable/…   canonical✓  -
snapd   2.54.4         15177  latest/stable  canonical✓  snapd
root@DO-Discourse:/var/discourse# 

那些叠加层是什么?可以删除它们吗?

您好 Andy,抱歉延迟回复。
此时请注意,在不了解您的宿主系统的情况下,很容易误导您,所以请备份/快照/等等……(甚至可以备份,启动一个新实例并测试恢复过程,这对我来说是一次很好的练习)
假设您不需要 lxd(lxc list 应该会显示已安装的容器),请执行 snap remove lxd(然后是 core18 和 20)。

1 个赞

可以分享一下 docker imagesdocker ps -a 的输出吗?

感谢您的帮助。是的,我对 Linux 知之甚少,所以我完全赞赏备份的建议。我有一个自动快照,并且在我像现在这样胡搞时会手动进行一次。

完全不知道 lxd 是什么。我不需要在这个 droplet 上运行 discourse/docker 之外的任何东西,因为它只是一个 discourse droplet。

1 个赞
root@DO-Discourse:/var/discourse# docker images
REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
local_discourse/app   latest    3dac608caa92   4 months ago   3.17GB
root@DO-Discourse:/var/discourse#
root@DO-Discourse:/var/discourse# docker ps -a
CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS        PORTS                                      NAMES
9abaf4517b7e   local_discourse/app   “/sbin/boot”   4 months ago   Up 4 months   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
root@DO-Discourse:/var/discourse#

考虑到

我认为你的 overlay2 文件夹上有一些悬空层。

请参阅此 StackOverflow 回答以获取指导:

3 个赞

谢谢。
这对我来说有点难,我只是做一个快照然后删除它们看看会发生什么,这样安全吗?

1 个赞

我认为可以安全地删除所有这些图片。如果你需要它们,重建时它们会被替换。

拍个快照倒是个不错的主意。

我会这样做:启动一个新实例;这是最安全的方法,而且可能比拍快照更快,但如果你觉得不知道如何做不有趣或没有指导意义,你的想法也很好。

2 个赞

删除了其中一张图片,问题解决了!

感谢大家的帮助。

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.