25GB 드롭렛에서 디스크 공간 부족으로 Discourse 업그레이드 실패

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 명령어를 테스트할 ‘test’ 인스턴스가 없습니다.

다른 제안이 있을까요?

25G 드롭렛에서 discourse 인스턴스를 실행하는 것이 더 이상 불가능한 건가요?

Prune unused Docker objects | Docker Docs 의 끝부분을 확인해 보세요.

모든 항목과 볼륨을 정리(prune)하는 것이 필요할 것 같습니다.

docker system prune --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all volumes not used by at least one container
  - all dangling images
  - all dangling build cache

Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
root@DO-Discourse:/# 

다른 제안이 있을까요?

snap에 대한 용도가 있으신가요?

별로 없습니다. 컨테이너를 위해 docker가 공간을 소비하고 있다는 점이 꽤 의미심장하네요. 정리 작업을 거친 후 제 수치는 yours와 매우 유사했는데, 이는 (반드시 그렇지는 않지만) 단순히 그만큼 사용량이 많다는 것을 시사할 수 있습니다.

저도 25GB Linode에서 문제를 겪었는데요, 당시에는 500MB 이상의 백업 파일들이 있었기 때문입니다. 두세 개의 백업을 삭제하니 재구축에 필요한 공간이 확보되었습니다. 상황이 점점 더 제약적으로 변할 것 같고 월간 크론 작업을 통해 재구축하고 싶었기 때문에 50GB인 상위 단계로 전환하는 것을 선택했습니다.

그것은 Ember CLI로의 전환 이전이었는데요, 이로 인해 용량이 상당히 커진 것일까요?

그 9GB 오버레이가 문제인 것 같습니다. 하지만 방금 확인해 본 다른 인스턴스에도 비슷한 크기의 오버레이가 하나 있습니다. 25GB에서는 항상 어려운 부분이었습니다. 저는 무릎을 베고 더 큰 SSD를 구매하는 것을 추천합니다. 다음으로 시도해 볼 수 있는 것은 OS 레벨에서 제거할 수 있는 것(로그, 불필요한 프로그램, find 인덱스 등)이 있는지 확인하는 것입니다.

또 다른 아이디어는 새 25GB VM을 생성하고 그곳으로 이전하는 것입니다. 이전 인스턴스를 가득 채운 것이 이번에는 문제가 되지 않기를 바라는 마음으로요.

이 답변들은 특별히 만족스럽지 않아 보입니다. 지난 1~2주 동안 제가 관리하는 1~2개의 인스턴스에서 25GB 드롭렛과 씨름했지만, 저는 당신이 제가 한 모든 것을 이미 수행했다고 생각합니다.

잘 모르겠습니다. discourse만 설치하는 경우에도 필요한가요? 만약 필요하지 않다면 어떻게 삭제하나요?

필요하지 않을 것 같습니다 :thinking:
전체 백업 다운로드 후 snap list를 실행하여 설치된 스냅을 확인하고, 없다면 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# 

오버레이란 무엇인가요? 삭제할 수 있나요?

안디, 안녕. 지연된 점 죄송합니다.
현재 단계에서는 호스트 시스템에 대한 통찰력이 없으므로, 여러분을 낭떠러지로 이끌 수 있으니, 백업/스냅샷 등을 미리 해두시기 바랍니다. (또는 백업을 한 후 새 인스턴스를 시작하여 복원 과정을 테스트해 보세요. 저에게는 좋은 연습이 되었습니다.)
lxd를 사용하지 않는다고 가정하면(lxc list로 설치된 컨테이너를 확인할 수 있습니다) snap remove lxd를 실행한 후 core18과 20도 제거하세요.

docker images와 docker ps -a의 출력을 공유해 주시겠어요?

도와주셔서 감사합니다. 네, 저는 리눅스에 대해 아는 것이 너무 적어서 백업하라는 조언을 진심으로 감사히 생각합니다. 자동 스냅샷을 설정해 두었고, 지금처럼 이것저것 만질 때는 항상 수동으로 스냅샷을 찍어 두는 편입니다.

lxd가 무엇인지 전혀 모르겠습니다. 이 드롭렛은 discourse 전용이므로 discourse/docker가 필요로 하지 않는 다른 것은 전혀 필요 없습니다.

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 폴더에 떠 있는(dangling) 레이어가 있는 것 같습니다.

다음 StackOverflow 답변을 참고해 보세요:

https://stackoverflow.com/a/70527862/702738

감사합니다.
그건 제 수준을 좀 넘는 것 같은데, 스냅샷을 만든 다음 삭제해서 어떻게 되는지 확인해도 괜찮을까요?

그 이미지들을 전부 삭제해도 안전할 것 같습니다. 나중에 필요하게 되면 재빌드할 때 다시 생성되니까요.

스냅샷을 찍어두는 것도 나쁜 아이디어는 아닙니다.

제가 한다면 새 인스턴스를 하나 띄울 것 같아요. 그게 가장 안전하고, 스냅샷보다 빠를 수도 있거든요. 하지만 그 방법을 알아두는 게 재미없거나 도움이 안 된다면, 당신의 방법도 괜찮습니다.

이미지 중 하나를 삭제하니 해결되었습니다!

도와주신 모든 분들께 감사드립니다.