이 글은 내가 관리하던 회사 Gitlab의 용량이 Full이 된 후 겪게 된 삽질을 다룬다.
때는 지난주 금요일, 함께 일하는 동료가 나에게 Gitlab 접속이 되지 않는다며 확인해달라고 한 게 시작이었다. Gitlab 웹 페이지에 접속을 시도하니 정말 5XX 에러가 뜨고 있었다. Putty로 Gitlab이 운영되고 있는 Ubuntu 서버에 접속해서 이것저것 확인해보니 디스크 용량의 Usage가 100%를 치고있던 것이었다…! 더욱이 이 하드 디스크의 용량은 고작 500GB밖에 되지 않았다. 지금까지 500GB 짜리 하나 믿고 Gitlab을 쓰고 있었다니… 곧바로 회사의 남는 하드 디스크를 공수하기 시작했다. 다행히 4TB짜리 놀고 있는 하드 디스크가 있어서 곧바로 Gitlab, 더 나아가서는 이 Gitlab을 작동시키는 Docker의 용량 확보를 위한 작업에 착수했다.
※참고> Linux 터미널에서 명령어를 사용하다가 Permission Denied 등이 뜰 경우 sudo 명령어로 root 권한을 얻어서 진행하길 바란다. 이와 더불어, 나는 cd 명령어를 수행할 때 권한 문제가 자꾸 발생하여 sudo chmod로 디렉터리의 접근 권한을 수정하며 폴더 이동을 했었다. cd 명령어는 shell에서 제공해주는 명령어이기 때문에 sudo cd가 먹히질 않았기 때문이다. 좋은 방법이었는지는 모르겠지만 혹 권한 문제로 어려움을 겪는 분들께 조그만 힌트라도 됐으면 한다.
1. PC에 새로운 하드 디스크 꼽기
새로운 하드 디스크를 PC에 추가하려면 두 종류의 선을 알아야 한다. 하나는 전원을 제공해주는 ‘파워 서플라이’이고, 다른 하나는 데이터를 송수신하기 위한 ‘SATA 케이블’이다. 파워 서플라이는 PC 본체에 있기 때문에 이 선을 이용하면 되지만, SATA 케이블은 PC 전문점이나 다이소 등에서 몇 천원주고 사와야 한다.
2. Ubuntu OS에 새로운 하드 디스크 인식시키기
Windows OS와 다르게 Ubuntu OS는 새로운 하드를 자동으로 인식하지 않는다. 따라서 사용자가 직접 하드 디스크를 마운트 시켜야 한다.
이 작업에서 참조한 글> https://seongkyun.github.io/others/2019/03/05/hdd_mnt/
3. Docker 서비스 중지
새로운 하드를 Ubuntu OS에서 인식할 수 있는 상태가 되면, 이제 본격적으로 docker를 다뤄볼 차례이다. 우선 현재 동작 중인 docker 프로세스를 중지시킨다.
$ systemctl stop docker
4. Docker 파일 이동하기
/var/lib/docker에 있는 docker 파일들을 새로운 하드 디스크의 경로로 이동시킨다. 여기서 새로운 하드의 경로는 각자 상황에 맞춰 개별적으로 지정해주면 된다. 나의 경우 /hdd_ext/hdd4000 경로에 docker 파일들을 놓기로 했다. 여기서 시간이 꽤나 소요된다. 나는 290GB를 옮겨야했기 때문에 명령어를 실행시켜놓고 퇴근했다.
$ mv /var/lib/docker [새 하드의 경로(나의 경우 /hdd_ext/hdd4000)]
5. 옮겨진 Docker 폴더 확인하기
/var/lib/docker에 있는 파일들이 모두 옮겨지면 ‘[새 하드의 경로] + /docker’ 폴더를 볼 수 있다. 나의 경우는 ‘/hdd_ext/hdd4000/docker’ 폴더이다.
6. Docker 경로 변경하기 (심볼릭 링크 또는 Root Directory 수정)
여기서 기존의 /var/lib/docker를 심볼릭 링크로 사용하는 방법과 docker의 Root Directory를 직접 변경하는 방법 두 가지가 있다. 나는 개인적인 뻘짓으로 인해 심볼릭 링크를 사용하는 방법을 포기하고 docker의 Root Directory를 직접 변경했는데, 이 글을 보는 분들은 심볼릭 링크를 활용해도 좋을 듯 하다. 심볼릭 링크를 활용하는 방법은 아래에 레퍼런스를 남겨둔다.
심볼릭 링크를 활용하는 방법에 관한 글> https://archive.formellow.com/it/834
7. Docker Root Directory 확인하기
위의 심볼릭 링크를 사용할 게 아니라면 마저 이 글을 따라오면 된다. 우선, /var/lib/docker에 있는 파일을 모두 옮겼으므로 Docker Root Directory를 변경해 주어야 한다. 기존의 Docker Root Directory를 확인하는 명령어는 다음과 같다.
$ docker info | grep ‘Docker Root Dir’
8. docker.service 파일 열기
/lib/systemd/system/docker.service 파일을 연다.
$ vi /lib/systemd/system/docker.service
9. docker.service 파일에서 Docker Root Directory 수정하기
ExecStart=/usr/bin/dockerd -H unix://
로 되어있는 라인을 주석으로 만든다. 주석은 라인 맨 앞에 '#'을 붙이면 된다.
#ExecStart=/usr/bin/dockerd -H unix://
이렇게.
그리고 아래와 같이 한 줄을 추가한다. (때에 따라 docker.service의 접근 권한을 chmod로 수정하고, vi를 sudo vi로 실행해야 할 수도 있다.)
ExecStart=/usr/bin/dockerd --graph='새로운 docker 폴더 경로 + /docker'
9. docker.service 파일 저장하기
:wq 명령어로 변경한 내용을 저장한 후 vim을 빠져 나온다.
10. 데몬 reload하기
자, 이제 변경할 부분들은 다 변경했다. 이제는 docker를 다시 올리면 된다. 우선 데몬을 reload 한다.
$ systemctl daemon-reload
11. Docker 실행시키기
$ systemctl start docker
12. Docker의 Root Directory의 변경 확인하기
docker의 Root Directory가 새로운 디스크의 docker 경로로 변경되었는지 확인한다.
$ docker info | grep 'Docker Root Dir’
13. Docker Container들의 마운트 상태 확인하기
docker container들이 잘 마운트 되었는지 확인한다. (나는 여기서 아무런 docker container가 나오지 않아서 오전 내내 식은 땀을 흘렸다. 뭐지.. 내가 회사 Gitlab을 망가뜨린 건가? 라는 생각이 계속 들었다. 1시간 반 동안의 삽질 끝에 원인은 docker의 Root Directory 경로가 잘못 입력되어 있었던 것이었다. Docker의 Root Directory를 설정할 때에는 새로운 하드 디스크의 docker 경로를 정확히 입력해주자.)
$ docker ps -a
14. Gitlab Docker Container의 STATUS 확인하기
Gitlab docker container의 STATUS가 healthy 상태이면 정상적으로 Gitlab이 실행되었음을 알 수 있다.
'Development Experience > *Ops' 카테고리의 다른 글
Rocky OS selinux 무한 재부팅 (0) | 2022.02.07 |
---|---|
GCP(Google Cloud Platform)와 MLOps (0) | 2022.01.04 |
SonarQube 라이센스 구입기 (0) | 2021.06.15 |
Gitlab CI/CD vs Jenkins CI/CD (0) | 2021.01.27 |
git abort 명령어가 안먹힐 때 (0) | 2020.09.08 |