rsync 사용법

    rsync 사용법

    Linux/Unix/OSX의 툴들 중, 파일관리/동기화/백업에 유용한 툴로 rsync를 뺴놓을 수 없을 것이다. GUI 기반의 상용 툴들도 많지만, rsync만으로도 개인 데이터 로컬/리모트 백업 등의 작업을 수행하는데는 어느 정도 충분하다고 생각한다.

     

    rsync

    rsync(remote sync)는 이름이 나타내는 바와 같이 원격 시스템과의 데이터 동기화를 지원하는 프로그램이다. 변경이 있는 파일만 선별적으로 복사하기 때문에, 전체 디렉토리들을 백업/복사할 경우 일반적인 복사 방법보다 효율적이고 빠르게 동작한다. 뿐만 아니라, 데이터를 압축하여 송/수신하므로 적은 대역폭이 사용된다.

    대부분의 리눅스 계열 및 OSX에는 기본적으로 설치가 되어 있지만, 만약 설치를 해야 한다면 아래와 같이 설치해보자.

    $ yum install rsync
    
    또는 
    
    $ apt-get install rsync

     

    rsync 기본 문법

    rsync is a file transfer program capable of efficient remote update
    via a fast differencing algorithm.
    
    Usage: rsync [OPTION]... SRC [SRC]... DEST
      or   rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
      or   rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
      or   rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
      or   rsync [OPTION]... [USER@]HOST:SRC [DEST]
      or   rsync [OPTION]... [USER@]HOST::SRC [DEST]
      or   rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
    The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
    to an rsync daemon, and require SRC or DEST to start with a module name.

    rsync는 로컬 -> 로컬, 로컬 -> 리모트, 로컬 <- 리모트간 파일복사를 지원한다. 위의 인용에서 보다시피 리모트 서버를 지정하는 경우, 호스트명:경로를 지정하면 된다. 접속 주소 표기시 아래와 같은 차이점은 있으니 참고하면 될 듯 하다.

    • : - shell 기반
    • :: - daemon 기반
     

     

    rsync 주요 옵션

    rsync가 제공하는 옵션은 아래와 같다.

     -v, --verbose               increase verbosity
     -q, --quiet                 suppress non-error messages
         --no-motd               suppress daemon-mode MOTD (see manpage caveat)
     -c, --checksum              skip based on checksum, not mod-time & size
     -a, --archive               archive mode; same as -rlptgoD (no -H)
         --no-OPTION             turn off an implied OPTION (e.g. --no-D)
     -r, --recursive             recurse into directories
     -R, --relative              use relative path names
         --no-implied-dirs       don't send implied dirs with --relative
     -b, --backup                make backups (see --suffix & --backup-dir)
         --backup-dir=DIR        make backups into hierarchy based in DIR
         --suffix=SUFFIX         set backup suffix (default ~ w/o --backup-dir)
     -u, --update                skip files that are newer on the receiver
         --inplace               update destination files in-place (SEE MAN PAGE)
         --append                append data onto shorter files
     -d, --dirs                  transfer directories without recursing
     -l, --links                 copy symlinks as symlinks
     -L, --copy-links            transform symlink into referent file/dir
         --copy-unsafe-links     only "unsafe" symlinks are transformed
         --safe-links            ignore symlinks that point outside the source tree
     -k, --copy-dirlinks         transform symlink to a dir into referent dir
     -K, --keep-dirlinks         treat symlinked dir on receiver as dir
     -H, --hard-links            preserve hard links
     -p, --perms                 preserve permissions
         --executability         preserve the file's executability
         --chmod=CHMOD           affect file and/or directory permissions
     -o, --owner                 preserve owner (super-user only)
     -g, --group                 preserve group
         --devices               preserve device files (super-user only)
         --specials              preserve special files
     -D                          same as --devices --specials
     -t, --times                 preserve times
     -O, --omit-dir-times        omit directories when preserving times
         --super                 receiver attempts super-user activities
     -S, --sparse                handle sparse files efficiently
     -n, --dry-run               show what would have been transferred
     -W, --whole-file            copy files whole (without rsync algorithm)
     -x, --one-file-system       don't cross filesystem boundaries
     -B, --block-size=SIZE       force a fixed checksum block-size
     -e, --rsh=COMMAND           specify the remote shell to use
         --rsync-path=PROGRAM    specify the rsync to run on the remote machine
         --existing              skip creating new files on receiver
         --ignore-existing       skip updating files that already exist on receiver
         --remove-source-files   sender removes synchronized files (non-dirs)
         --del                   an alias for --delete-during
         --delete                delete extraneous files from destination dirs
         --delete-before         receiver deletes before transfer (default)
         --delete-during         receiver deletes during transfer, not before
         --delete-after          receiver deletes after transfer, not before
         --delete-excluded       also delete excluded files from destination dirs
         --ignore-errors         delete even if there are I/O errors
         --force                 force deletion of directories even if not empty
         --max-delete=NUM        don't delete more than NUM files
         --max-size=SIZE         don't transfer any file larger than SIZE
         --min-size=SIZE         don't transfer any file smaller than SIZE
         --partial               keep partially transferred files
         --partial-dir=DIR       put a partially transferred file into DIR
         --delay-updates         put all updated files into place at transfer's end
     -m, --prune-empty-dirs      prune empty directory chains from the file-list
         --numeric-ids           don't map uid/gid values by user/group name
         --timeout=TIME          set I/O timeout in seconds
     -I, --ignore-times          don't skip files that match in size and mod-time
         --size-only             skip files that match in size
         --modify-window=NUM     compare mod-times with reduced accuracy
     -T, --temp-dir=DIR          create temporary files in directory DIR
     -y, --fuzzy                 find similar file for basis if no dest file
         --compare-dest=DIR      also compare destination files relative to DIR
         --copy-dest=DIR         ... and include copies of unchanged files
         --link-dest=DIR         hardlink to files in DIR when unchanged
     -z, --compress              compress file data during the transfer
         --compress-level=NUM    explicitly set compression level
     -C, --cvs-exclude           auto-ignore files the same way CVS does
     -f, --filter=RULE           add a file-filtering RULE
     -F                          same as --filter='dir-merge /.rsync-filter'
                                 repeated: --filter='- .rsync-filter'
         --exclude=PATTERN       exclude files matching PATTERN
         --exclude-from=FILE     read exclude patterns from FILE
         --include=PATTERN       don't exclude files matching PATTERN
         --include-from=FILE     read include patterns from FILE
         --files-from=FILE       read list of source-file names from FILE
     -0, --from0                 all *-from/filter files are delimited by 0s
         --address=ADDRESS       bind address for outgoing socket to daemon
         --port=PORT             specify double-colon alternate port number
         --sockopts=OPTIONS      specify custom TCP options
         --blocking-io           use blocking I/O for the remote shell
         --stats                 give some file-transfer stats
     -8, --8-bit-output          leave high-bit chars unescaped in output
     -h, --human-readable        output numbers in a human-readable format
         --progress              show progress during transfer
     -P                          same as --partial --progress
     -i, --itemize-changes       output a change-summary for all updates
         --out-format=FORMAT     output updates using the specified FORMAT
         --log-file=FILE         log what we're doing to the specified FILE
         --log-file-format=FMT   log updates using the specified FMT
         --password-file=FILE    read password from FILE
         --list-only             list the files instead of copying them
         --bwlimit=KBPS          limit I/O bandwidth; KBytes per second
         --write-batch=FILE      write a batched update to FILE
         --only-write-batch=FILE like --write-batch but w/o updating destination
         --read-batch=FILE       read a batched update from FILE
         --protocol=NUM          force an older protocol version to be used
     -E, --extended-attributes   copy extended attributes
         --cache                 disable fcntl(F_NOCACHE)
     -4, --ipv4                  prefer IPv4
     -6, --ipv6                  prefer IPv6
         --version               print version number
    (-h) --help                  show this help (-h works with no other options)

    이 옵션들 중, 주요 옵션들 위주로 축약하면 다음과 같다.

    • -a, --archive: -rlptgoD와 동일, 즉 rlptgoD가 무엇인지 살펴보면 되고, -a옵션을 지정한 경우는 rlptgoD를 별도 지정할 필요가 없다.
      • -r, --recursive: 하위 디렉토리 포함하여 재귀 탐색
      • -l, --links: symbolic link를 그대로 보존
      • -p, --perms: permission을 그대로 보존
      • -t, --times: timestamp를 그대로 보존
      • -g, --group: group 속성을 그대로 보존
      • -o, --owner: owner 속성을 그대로 보존
      • -D, --device: 디바이스 파일 보존
    • -v, --verbose: 복사/동기화시 상세 내용 출력
    • -h, --human-readable: 사람이 읽기 쉬운 메시지로 출력
    • -z, --compress: 데이터 복제시 압축하여 처리

    결론적으로, 개인적으로 많이 사용하는 옵션은 위 옵션의 조합이다. avzh

     

    rsync 사용 예

    // 로컬 데이터 백업
    $ rsync -avzh /data /backup
    
    // 로컬의 데이터를 리모트로 복제
    $ rsync -avzh /data 192.168.1.100:/backup
    
    // 사용자 계정을 지정하여 전송
    $ rsync -avzh /data user@192.168.1.100:/backup
    
    // ssh 포트가 다를 경우 지정
    $ rsync -avzh -e 'ssh -p 8888' /data 192.168.1.100:/backup
    
    // 백업 서버를 로컬로 복제
    $ rsync -avzh 192.168.1.100:/backup /data
    

    댓글

    Designed by JB FACTORY