Rclone은 구글의 Go 언어를 기반으로 만들어진 오픈 소스 다중 스레드 명령어 프로그램입니다. 보통 클라우드 스토리지나 오브젝트 스토리지 간에 많은 양의 데이터를 이동하기 위해 사용됩니다.
Rclone을 사용하면 컴퓨터의 성능을 최대한 활용해 데이터를 전송하는 게 가능합니다.
리눅스를 기준으로 설명하지만 윈도우도 별 차이는 없습니다. Rclone을 다운로드 받고 PowerShell(윈도우 자체 프로그램)을 검색해 실행합니다. 명령어는 다 똑같습니다.
물론 간단한 걸 선호하는 윈도우 사용자의 경우 CyberDuck, FileZilla, RaiDrive 등을 사용하는 게 좋습니다.
RaiDrive는 네트워크 드라이브 마운트를 지원해서 가장 간단하지만 무료 버전은 기능이 제한되어있습니다. CyberDuck과 FileZilla는 비슷한데 사이버덕이 좀 더 성능이 좋은 것 같습니다.
Rclone 설정하기
sudo -v ; curl https://rclone.org/install.sh | sudo bash
리눅스나 맥에서는 다음과 같은 명령어로 설치 가능합니다.
root@instance-20230826-0503:~# rclone config
Current remotes:
Name Type
==== ====
cloudflare s3
storj2 s3
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>
rclone config를 입력해서 연결을 설정할 수 있습니다. Rclone은 대화형으로 만들어져서 명령어를 입력할 때마다 위와 같이 선택할 수 있는 옵션을 보여주고 질문을 합니다.
새로운 연결을 설정하려면 n을 입력하고 엔터를 누릅니다.
Enter name for new remote.
name>
새로운 연결의 이름을 입력합니다. 본인이 원하는 이름을 정하면 됩니다.
1 / 1Fichier
\ (fichier)
2 / Akamai NetStorage
\ (netstorage)
3 / Alias for an existing remote
\ (alias)
4 / Amazon Drive
\ (amazon cloud drive)
5 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, ArvanCloud, Ceph, China Mobile, Cloudflare, GCS, DigitalOcean, Dreamhost, Huawei OBS, IBM COS, IDrive e2, IONOS Cloud, Liara, Lyve Cloud, Minio, Netease, Petabox, RackCorp, Scaleway, SeaweedFS, StackPath, Storj, Tencent COS, Qiniu and Wasabi
\ (s3)
...
엔터를 누르면 연결 가능한 수십 개의 옵션이 표시됩니다. 번호를 입력하거나 괄호 안의 단어를 입력해 선택할 수 있습니다. 여기서는 S3 Generic을 이용해 연결해보겠습니다.
1 / Amazon Web Services (AWS) S3
\ (AWS)
2 / Alibaba Cloud Object Storage System (OSS) formerly Aliyun
\ (Alibaba)
3 / Arvan Cloud Object Storage (AOS)
\ (ArvanCloud)
...
S3 API 호환이 가능한 서비스의 종류가 표시됩니다. 본인이 이용 중인 서비스를 입력하면 됩니다.
1 / Enter AWS credentials in the next step.
\ (false)
2 / Get AWS credentials from the environment (env vars or IAM).
\ (true)
env_auth>
1번을 입력하고 access key, secret key, endpoint 등을 입력합니다.
Edit advanced config?
y) Yes
n) No (default)
y/n>
고급 설정은 넘어가도 됩니다. Rclone에서 플래그를 이용해 추가적인 설정을 할 수 있는데 고급 설정에서 다양한 플래그의 ‘기본값’을 변경할 수 있습니다.
고급 설정을 하지 않아도 수동으로 플래그를 입력할 수 있습니다.
Rclone 활용하기
Rclone은 크기가 큰 하나의 파일에 대한 멀티파트 업로드를 지원합니다. 즉 하나의 파일을 여러 개의 조각으로 나눈 뒤 동시에 업로드하고 다시 합치는 게 가능합니다.
또한 다중 업로드가 가능합니다. 여러 개의 파일을 동시에 업로드합니다.
크기가 크고 개수가 적은 파일
rclone copy 1gb.zip remote:apple --progress --s3-upload-concurrency 16 --s3-chunk-size 64M
1GB 파일을 업로드하는 상황을 생각해보겠습니다. 파일 이름이 1gb.zip인 경우이며 사용할 연결의 이름은 remote이고 사용할 버킷의 이름은 apple입니다.
–progress : 진행상황을 보여주는 플래그입니다.
–s3-upload-concurrency : 몇 개의 멀티파트로 업로드 할 지 설정하는 플래그입니다.
–s3-chunk-size : 멀티파트 하나 당 크기를 설정하는 플래그입니다.
위와 같이 명령어를 입력하면 64M * 16 = 1024M이므로 1GB 파일을 정확하게 업로드하며 최대한의 속도를 낼 수 있습니다.
멀티파트 업로드의 경우 concurrency와 chunk size를 곱한 만큼 램이 필요합니다.
rclone copy 1gb.zip remote:apple --progress
물론 플래그를 전부 생략하고 명령어를 입력해도 되지만 이 경우 최대한의 속도를 낼 수 없습니다.
크기가 작고 개수가 많은 파일
rclone copy /etc/easypanel/projects/pdf/wordpress/volumes/data/wp-content cloudflare:wordpress --progress --checkers 200 --transfers 150
/etc/easypanel/projects/pdf/wordpress/volumes/data/wp-content 경로에서 cloudflare라는 이름의 연결을 사용해 wordpress라는 이름의 버킷에 다중 업로드합니다.
–progress : 진행상황을 보여주는 플래그입니다.
–checkers : 원본과 목적지의 파일을 비교하여 중복을 방지하는 플래그입니다.
–transfers : 다중 업로드 개수를 설정하는 플래그입니다.
빠르게 업로드하려면 –checkers –transfers 수를 크게 하는 게 좋습니다. 다만 CPU 소모량이 증가하며 50-60% 정도의 CPU가 사용되다가 임계점을 넘어가면 오버헤드가 걸리며 100%의 CPU가 사용되므로 적당한 수치를 찾도록 합니다.
Rclone 다른 명령어
위의 예시는 copy를 사용해 파일을 복사했습니다.
rclone sync /home/image remote:apple --progress
sync를 사용하면 원본은 유지하고 목적지의 모든 파일을 원본과 동일하게 변경합니다. 이 과정에서 파일이 업로드되거나 기존에 있던 ‘목적지’의 파일이 삭제되기도 합니다. 원본은 절대 변하지 않습니다.
rclone purge remote:apple --progress --checkers 16
purge를 사용하면 해당 경로의 파일을 전부 지울 수 있습니다. 경로를 설정하지 않을 경우 버킷까지 지워집니다.
또한 Rclone의 명령어 구조는 기본적으로 원본이 앞에 오고 목적지가 뒤에 오도록 되어있습니다. 위의 예시는 업로드였지만 원본과 목적지의 위치를 바꾸면 다운로드가 가능합니다.
Rclone 속도가 느린 경우
크게 두 가지 원인이 있습니다. 업로드와 다운로드하는 컴퓨터의 사양과 네트워크 대역폭이 충분하지 않은 경우가 첫 번째입니다. CPU나 램의 사용량을 확인합니다.
API 제한이 두 번째입니다. S3 API 또는 기타 API에 업체마다 다른 제한을 걸어놓는데 예를 들어 1초에 2회로 제한되어있으면 ‘PUT OBJECT’ API의 제한으로 인해 아무리 파일이 작아도 1초에 2개만 업로드가 가능합니다.
구글 드라이브 또한 과거에는 API 제한을 걸어놓지 않았으나 남용 사례가 많아지며 요즘은 대역폭과 API가 점점 제한되고 있습니다.
클라우드플레어의 R2 오브젝트 스토리지는 업로드와 다운로드에 API 제한이 없습니다.
이렇듯 본인이 사용 중인 클라우드 스토리지나 오브젝트 스토리지의 API 제한을 확인해야 합니다.