본문 바로가기
IT 인프라

NextCloud 디스크 할당량 이슈

by 미생코딩 2023. 10. 26.

안녕하세요! 

현재 회사에서 이직했을 당시 첫 미션이었던 NextCloud 사용자 디스크 할당량 이슈와 제가 어떻게 해결했는지 

같이 한번 보죠.

먼저, NextCloud는 중소기업이 사랑하는 오픈소스 기반 클라우드 스토리지 소프트웨어입니다. 

기업에서 서버의 용량만 있다면 무료로 사용할 수 있는 클라우드 서비스인데, 사용 안 할수가 없겠죠? 

증상은 사용자가 파일을 업로드하고, 삭제해도 해당 파일의 용량이 줄어들지 않았고, 업로드 용량이 두배로 적용됐었습니다. 용량이 줄어들지 않으니 사용자 할당량을 계속 늘려주는 방법 밖엔 없었죠.

[NextCloud 사용자별 할당량]

관련 커뮤니티를 찾아본 결과 NextCloud의 버그로 밝혀졌으며, 회사 시스템과 호환성 문제로 최신 업데이트를 진행하지 않고 DB Table로 접근하여 캐시 파일을 삭제하는 방법을 고안했습니다. 

DB에 접근하는 명령어는 설치되어 있는 OS와 DBMS에 따라 다르며, 저는 CentOS 7.9 Nethserver를 사용 중이므로 이에 맞는 명령어를 알려드리겠습니다. 

NethServer-NextCloud DB접근 방법: mysql --socket /run/rh-mariadb105-mariadb/nextcloud-mysql.sock 

처음엔 DB접근 하는 방법만 찾는데 시간이 꽤 걸렸었습니다. (서버에 DB가 여러 개 설치되어 있었거든요.)

DB에 접속하고 Database를 선택하고, 사용자 파일 캐시가 저장되어 있는 테이블은 "oc_filecache"입니다. 이름이 참 정직하죠? 

해결 방법을 정리하자면, 

DB Table oc_filecache”의 컬럼 “encrypted”의 값이 0인 경우 “unencrypted_size” 값을 0으로 초기화

encrypted” 값이 0인 경우 파일 암호화 비활성화에 대한 옵션이며, unencrypted_size” 값 또한 0으로 설정되어야 정상입니다.

update 쿼리로 초기화해줍니다. update oc_filecache set unencrypted_size=0 where encrypted=0;

많은 사용자가 파일 업로드 할 때 마다 직접 초기화하기엔 너무 귀찮으니 DB 스케줄러를 적용하여 자동화해줍시다. 

  • 이벤트 스케줄러 활성화

set global event_scheduler = on;

  • 이벤트 생성 ( []칸 안에 채워주시면 됩니다. )

CREATE EVENT [event_name]

ON SCHEDULE every [interval]

STARTS [start_time]

ENDS [end_time]

DO

[SQL_QUERY;]

  • 실제 제가 생성한 이벤트 ( 하루 1회 )

CREATE EVENT cache_clean

ON SCHEDULE every 1 day

STARTS '2023-03-31 23:00:00'

ON SCHEDULE every 1 day

DO

update oc_filecache set unencrypted_size=0 where encrypted=0;

  • 이벤트 확인

Show events;

이상입니다. 

보시고 궁금한 점이나 다른 개선 방법이 있다면 댓글로 부탁드립니다. 

감사합니다.