RClone 분석

jingyu·2022년 6월 28일
0

Golang

목록 보기
3/3

Rclone 분석

개요

다양한 Storage간의 데이터를 옮기기 위해 사용
AWS, GCP등 다양한 클라우드 스토리지를 지원하는 오픈소스 도구
로컬 데이터 전송도 지원

데이터 전송

config 개념을 사용해 출발지와 목적지를 간편하게 설정

스토리지 선택 후 해당 스토리지 접속을 위한 설정 입력

"13.Google Drive"를 선택하였다면 ClientID, secret을 입력이 나오는데 선택적으로 입력할 수 있다.

그 밖에 Oauth인증, Service account, Team drive등 다양한 설정들이 나온다.

이 Config를 사용함으로써 매번 데이터 전송시마다 출발지, 목적지, Credential등을 설정해야 하는 번거로움을 덜 수 있다.

Copy vs Sync

copy는 source에서 destination으로 복사 전송, 기존 destination 파일 삭제하지 않음
sync는 source의 상태를 destination과 동일하게 함으로써 전송, 기존 destination 파일 삭제

Remote Object Storages

  • 1Fichier
  • Alias
  • Amazon Drive
  • Amazon S3
  • Backblaze B2
  • Box
  • Chunker - transparently splits large files for other remotes
  • Citrix ShareFile
  • Compress
  • Crypt - to encrypt other remotes
  • DigitalOcean Spaces
  • Dropbox
  • Enterprise File Fabric
  • FTP
  • Google Cloud Storage
  • Google Drive
  • Google Photos
  • Hasher - to handle checksums for other remotes
  • HDFS
  • HTTP
  • Hubic
  • Jottacloud
  • Koofr
  • Mail.ru Cloud
  • Mega
  • Memory
  • Microsoft Azure Blob Storage
  • Microsoft OneDrive
  • OpenStack Swift / Rackspace Cloudfiles / Memset Memstore
  • OpenDrive
  • Pcloud
  • premiumize.me
  • put.io
  • QingStor
  • Seafile
  • SFTP
  • Sia
  • SugarSync
  • Tardigrade
  • Union
  • Uptobox
  • WebDAV
  • Yandex Disk
  • Zoho WorkDrive
  • The local filesystem

중복 검사

기본적으로 파일 전송시 파일의 수정시간과 크기를 비교하여 동일 파일인지 확인
전송 Flag (https://rclone.org/flags/) - 복사/이동시 중복파일 설정, 전송량 제한등에 대한 설정

  • --no-traverse
    copy, move 사용시 대상 파일시스템을 traverse할지 결정, 설정 시 대상 파일시스템을 listing하지 않음
    복사하려는 파일이 얼마 안되고 대상 파일시스템에 많은 파일들이 있는 경우 사용하면 전송 시간이 단축됨

  • --ignore-existing
    소스와 대상을 비교한 후, 대상 파일이 이미 존재하면 파일 내용과 상관없이 전송하지 않고 무시함

  • --drive-server-side-across-configs=true
    원격지에서 원격지로 전송할 때 중간에 rclone이 설치된 기기를 거치지 않고, 원격지에서 원격지로 바로 전송하는 옵션

  • --bwlimit 10M
    업로드 및 다운로드 시 대역폭을 10M으로 제한
    특정 시간에 특정 제한이 적용되도록 하는 제한의 "시간표"를 지정하는 것도 가능

  • --bwlimit "08:00,512k 12:00,10M 13:00,512k 18:00,off"
    ex) 전송 대역폭은 매일 오전 8시에 512KiB/s로 설정, 12시에 10MiB/s로 상승하고 오후 1시에 512KiB/초로 다시 떨어지고 6시에 비활성화 됨

  • --bwlimit "Mon-00:00,512 Fri-23:59,10M"
    ex) 월요일에 512K로 설정, 금요일이 끝날때 10M로 증가

  • --buffer-size=SIZE
    버퍼 사이즈 설정, "–transfer" 옵션과 사용(default 16Mi)

  • --contimeout=TIME
    커넥션 타임아웃 설정, 원격 스토리지에 연결될때까지 대기하는 시간

  • --copy-dest=DIR
    소스와 동일한 파일이 있을 경우 DIR 경로에 복사됨

  • --ignore-checksum
    체크섬 검사를 하지않음
    일반적으로 전송된 파일의 체크섬을 확인하고 일치하지 않으면 에러메세지를 출력

  • --ignore-size
    파일 전송시 크기를 비교하지 않음, 수정시간만 체크 함

  • --ignore-times
    대상의 파일 상태에 관계없이 모든 파일을 무조건 업로드 함

  • --immutable
    파일 수정 방지
    sync, copy, move 명령어 사용시 만약 소스와 대상 파일이 일치하지 않는다면 에러 메세지가 출력됨
    파일 전송시에 삭제나 수정을 막고자 할때 사용

  • --max-duration=TIME
    최대 전송 시간, 전송시간에 도달하면 전송을 종료함

  • --max-transfer=SIZE
    최대 전송 크기, 전송크기에 도달하면 전송을 종료함

  • --modify-window=TIME
    소스 파일 시간과 대상 파일 시간 차가 설정된 TIME 크기이상 차이 날 경우 수정된 것으로 판단(default 1s)
    파일 수정 여부를 확인할때 사용

  • --multi-thread-streams=N
    멀티 쓰레드 다운로드 시 사용할 최대 스트림 개수(default 4)
    0..250 MiB files will be downloaded with 1 stream
    250..500 MiB files will be downloaded with 2 streams
    500..750 MiB files will be downloaded with 3 streams
    750+ MiB files will be downloaded with 4 streams
    --no-check-dest
    파일 전송시 대상 파일들을 확인하지 않고 복사함, 중복 복사 가능
    전송시 트랜잭션 최소화
    S3에서는 적용되지 않음(this can cause duplicates on remotes which allow it (e.g. Google Drive))

2022/02/17 17:31:46 ERROR : a: Failed to copy: Put "https://s3.us-east-1.amazonaws.com/score-test1/a?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAWIET3EHAM3PMPIEQ%2F20220217%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220217T083146Z&X-Amz-Expires=900&X-Amz-SignedHeaders=content-md5%3Bcontent-type%3Bhost%3Bx-amz-acl%3Bx-amz-meta-mtime&X-Amz-Signature=dd31006ce45f452fea930d8c626182c0c6440aa5bd30e5bf8f54e620e0d8322d": 301 response missing Location header

  • --size-only
    소스와 대상 파일의 변경 여부를 사이즈만 보고 판단

  • --stats=TIME
    파일 전송시 데이터 전송 상태를 출력함(default 1m)

  • --suffix=SUFFIX
    파일 전송시 덮어쓰거나 삭제된 파일에 접미사가 추가됨

    rclone copy -i /path/to/local/file remote:current --suffix .bak

  • --transfers=N
    병렬로 실행할 파일 전송 개수
    타임아웃 시간이 길때는 적은 수로 설정하고 대역폭이 크고 빠른 경우는 크게 설정

  • --update
    대상 파일의 수정 시간이 소스 파일보다 최신인 경우 건너 뜀

  • --use-server-modtime
    일부 스토리지에서(ex. swift, s3) 파일 수정시간을 유지하지 않는 경우가 있음
    rclone에서 원래의 수정 시간을 메타데이터로 저장하여 사용

필터링 Flag(https://rclone.org/filtering/)

복사/이동시 파일명, 사이즈, 생성시간등을 기준으로 필터링

  • --exclude
    패턴과 일치하는 파일이나 경로는 제외, "–include"와 함께 사용할 수 없음

    rclone ls remote: --exclude *.bak
    ex) 목록에서 .bak 확장자 파일은 제외


    rclone size remote: "--exclude /dir/**"
    ex) "dir" 경로는 제외하고 사이즈 출력

  • --include
    패턴과 일치하는 파일이나 경로만 포함, "–exclude"와 함께 사용할 수 없음

    rclone copy /vol1 remote: --include "{A,B}/**"
    ex) "A","B" 파일을 전송

  • --filter
    파일이나 경로에 대한 필터링 규칙
    "+', "-" 명령어에 따라 파일 include, exclude
    "+", "-" 명령어 중복 사용 가능

    rclone ls remote: --filter "- *.bak"
    ex) 목록에서 .bak 확장자 파일은 제외

  • --min-size
    설정된 사이즈보다 작은 파일은 전송하지 않음

    rclone ls remote: --min-size 50k
    ex) 50KiB보다 큰 파일만 목록 출력


    rclone --min-size 100M delete remote:path
    ex) 100M 보다 큰 파일만 삭제

  • --max-size
    설정된 사이즈보다 큰 파일은 전송하지 않음

    rclone ls remote: --max-size 1G
    ex) 1G보다 작은 파일만 목록 출력

  • --max-age Duration
    Duration 이전에 생성된 파일들만 전송

    rclone copy --max-age 24h --no-traverse /path/to/src remote:
    ex) 최근 24시간동안 생성된 파일만 전송

  • --min-age Duration
    Duration 이후에 생성된 파일들만 전송

    rclone move --min-age 100d /path/to/src remote:path
    ex) 생성된지 100일이 경과한 파일만 전송

  • --delete-excluded
    동기화에서 제외된 파일들만 삭제

    rclone --min-size 50k --delete-excluded sync A: B:
    ex) B 저장소에서 50KiB보다 작은 파일들은 삭제

참고
https://nangman14.tistory.com/36?category=814500

profile
내일을 향해 쏴라!

0개의 댓글