rsync ์‚ฌ์šฉ๋ฒ• - data backup ํฌํ•จ


ํ•˜๋‹จ์˜ "path ์— slash ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋™์ž‘ ๋ฐฉ์‹"์„ ์ˆ™์ง€ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์„ธ์š”.


์†Œ๊ฐœ

rsync ๋Š” Remote Sync ์˜ ์•ฝ์ž๋กœ samba ์˜ ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž์ธ Andrew Tridgell ์ด ๋งŒ๋“  file & directory ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ด์ž Unix์šฉ ์ปค๋งจ๋“œ๋ผ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ด๋‹ค. 

์ „์†ก์‹œ์— ๋„คํŠธ์› ๋Œ€์—ญํญ์„ ์ตœ์†Œํ™”ํ•˜๋Š” delta encoding algorithm ์„ ๊ตฌํ˜„ํ•˜์—ฌ rcp ๋‚˜ scp ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ site ๊ฐ„์˜ ๋ฐ์ดํƒ€๋ฅผ ๋™๊ธฐํ™”ํ•œ๋‹ค.

rsync๋Š” client์™€ server ํ”„๋กœ๊ทธ๋žจ์ด ๋ชจ๋‘ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ server ๋กœ ๊ตฌ๋™์‹œ TCP์˜ 873 ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

server ๊ตฌ๋™์‹œ SSH ๋‚˜ RSH ๊ฐ™์€ Remote Shell protocol ๊ธฐ๋ฐ˜์—์„œ ๋™์ž‘ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ssh ๊ธฐ๋ฐ˜์œผ๋กœ rsync ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฉํ™”๋ฒฝ ์˜คํ”ˆ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์ด ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.(SSH ์ถ”์ฒœ)


์ฃผ์š” ์šฉ๋„๋กœ๋Š” ์ „ํ†ต์ ์ธ rcp, scp๋ฅผ ๋Œ€์น˜ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›๊ฒฉ ์‚ฌ์ดํŠธ ๋ฏธ๋Ÿฌ๋ง(Remote Site mirroring), ๋ฐ์ดํƒ€ ๋ฐฑ์—…(data backup) ๋“ฑ์˜ ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


์šฉ๋ฒ•

 rsync ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

rsync options source destination

์ฃผ์š” ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • -v: verbose ์ž์„ธํ•œ ์ •๋ณด ์ถœ๋ ฅ
  • -r : ์žฌ๊ท€์ ์œผ๋กœ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊นŒ์ง€ ๋ณต์‚ฌ(๋‹จ ์ „์†ก์‹œ ํƒ€์ž„์Šคํƒฌํ”„๋‚˜ permission์„ ๋ณด์กดํ•˜์ง€ ์•Š๋Š”๋‹ค)
  • -a : archive mode. -r, -t(ํƒ€์ž…์Šคํƒฌํ”„ ๋ณด์กด), -l (์‹ฌ๋ณผ๋ฆญ ๋งํฌ ๋ณด์กด), -p(permission ๋ณด์กด), -g(g๊ทธ๋ฃน ๋ณด์กด), -o(์†Œ์œ ์ž ๋ณด์กด - root ๋งŒ ๊ฐ€๋Šฅ),  -D(device, special ํŒŒ์ผ ๋ณด์กด)๊ณผ ๋™์ผํ•˜๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ rsync ๋กœ ๋ณต์ œ์‹œ -a ์˜ต์…˜์— -z ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค.
  • -z : ๋ฐ์ดํƒ€ ์••์ถ•
  • -h : human-readable, output numbers in a human-readable format


path ์— slash ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋™์ž‘ ๋ฐฉ์‹

source path ์— trailing slash ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ rsync ๋Š” ๋ชฉ์ ์ง€์— ํด๋”๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋‹ˆ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

๋ฐฑ์—… ๋Œ€์ƒ ์†Œ์Šค์ธ test ํด๋”์— dir1, dir2 ๋ผ๋Š” ํ•˜์œ„ ํด๋”๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ใ…‡ํ•ด ๋ณด์ž.

test source ํด๋”
$ tree test
test
โ”œโ”€โ”€ dir1
โ””โ”€โ”€ dir2


๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

$ rsync -a test test_dest


$ tree test_dest/
test_dest/
โ””โ”€โ”€ test
    โ”œโ”€โ”€ dir1
    โ””โ”€โ”€ dir2

๋ชฉ์ ์ง€์ธ test_dest ํ•˜์œ„์— source ๊ฒฝ๋กœ์ธ test ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ์•ˆ์— ํŒŒ์ผ๊ณผ ํด๋”๊ฐ€ ๋ณต์‚ฌ๋œ๋‹ค.


์†Œ์Šค์— / ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ชฉ์ ์ง€์— ์†Œ์Šค์˜ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋ณต์‚ฌํ•œ๋‹ค.

ํด๋” ๋‚ด์šฉ๋งŒ ๋ณต์‚ฌ
$ rsync -a test/ test_dest


$ tree test_dest/
test_dest/
โ”œโ”€โ”€ dir1
โ””โ”€โ”€ dir2


์œ„์™€ ๊ฐ™์ด / ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋™์ž‘์ด ๋‹ค๋ฅด๋ฏ€๋กœ rsync ๋กœ ๋ฐฑ์—…์‹œ ์ฃผ์˜ํ•ด์•ผ ํ•˜๋ฉฐ ๋‹ค์Œ rsync ๋ช…๋ น์–ด๋Š” ๋‘˜ ๋‹ค ๋™์ผํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

$ rsync -azvh /var/lib/mysql /home/backups
$ rsync -azvh /var/lib/mysql/ /home/backups/mysql



์‚ฌ์šฉํ•˜๊ธฐ

Local โžก Local

mysql ์˜ DB ๋ฅผ /home/backups/mysql ์— ๋ณต์ œ

 rsync -azvh /var/lib/mysql /home/backups


Local โžก Remote

Local ์˜ /root/data ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ example.com ์˜ /home/lesstif/backup ์— ๋ณต์ œ. ํ˜ธ์ŠคํŠธ ๋ช…(example.com) ๋’ค์— : ๊ฐ€ ๋น ์ง€๋ฉด ์ œ๋Œ€๋กœ ๋™์ž‘ ์•ˆ ํ•˜๋‹ˆ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

$ rsync -avz /home/lesstif/data/ lesstif@example.com:/home/lesstif/backup/ 

Remote โžก Local

example.com ์˜ /home/lesstif/data ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ local ์˜  /home/lesstif/backup/  ์— ๋ณต์ œ

$ rsync -avz lesstif@example.com:/home/lesstif/data /home/lesstif/backup/ 


Remote ์˜ ์ผ๋ถ€๋งŒ Local ์— ๋ณต์ œ

๋ฐฑ์—… ๋Œ€์ƒ ํด๋”์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ ํด๋”๊ฐ€ ์žˆ๊ณ  ํŠน์ • ํด๋”๋งŒ ๋ฐฑ์—…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.


์˜ˆ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด src ์— 3๊ฐœ์˜ ํ•˜์œ„ ํด๋”๊ฐ€ ์žˆ๊ณ  dir1, dir3 ๋งŒ ๋ณต์ œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ

$ tree ../src/

../src/
โ”œโ”€โ”€ dir1
โ”‚   โ””โ”€โ”€ file1
โ”œโ”€โ”€ dir2
โ”‚   โ””โ”€โ”€ file2
โ””โ”€โ”€ dir3
    โ””โ”€โ”€ file3


trailing slash ์— ๋”ฐ๋ผ rsync ์˜ ๋™์ž‘์ด ๋‹ค๋ฅธ ์ ์„ ํ™œ์šฉํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด for ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ src ์˜ ๋งจ ๋’ค์— / ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด dir1๊ณผ dir3 ์˜ ๋‚ด์šฉ๋งŒ ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

$ cd src
$ for i in dir1 dir3; do rsync -avz lesstif@example.com:$PWD/$i/ /home/lesstif/backup/$i;done



๋Œ€์ƒ ํŒŒ์ผ ๋ณ€๊ฒฝ์‹œ ๋ฎ์–ด ์“ฐ์ง€ ์•Š์Œ

๋™๊ธฐํ™”์‹œ ๋ชฉ์ ์ง€(destination) ํŒŒ์ผ์ด ์ˆ˜์ •๋˜์—ˆ์„ ๊ฒฝ์šฐ rsync ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด source ํŒŒ์ผ๋กœ ๋ฎ์–ด์จ ๋ฒ„๋ฆฐ๋‹ค.

์ฆ‰ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด /lesstif/lesstif/backup/a.conf ํŒŒ์ผ์ด ๋ฐ”๋€Œ์—ˆ์–ด๋„ ๋ฆฌ๋ชจํŠธ์— ์žˆ๋Š” a.conf ๋กœ ๋ฎ์–ด์จ ๋ฒ„๋ฆฐ๋‹ค.


์ด ์ƒํ™ฉ์„ ์›์น˜์•Š์„ ๊ฒฝ์šฐ rsync ์— -u ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ฉด ํŒŒ์ผ์ด ๋ณ€๊ฒฝ ๋˜์—ˆ์„ ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋Š”๋‹ค.

$ rsync -avuz lesstif@example.com:/home/lesstif/data /home/lesstif/backup/ 


 

๊ณ ๊ธ‰ ์˜ˆ์ œ

Remote ์˜ ํด๋”์ค‘ ์ผ๋ถ€๋งŒ Local ์— ๋ณต์ œ

์•„๋ž˜์™€ ๊ฐ™์ด src ์— ์—ฌ๋Ÿฌ ํด๋”๊ฐ€ ์žˆ๊ณ  ์ด์ค‘์— dir1, dir2 ๋งŒ ๋ณต์‚ฌํ•ด์•ผ ํ•  ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

$ tree ../src/


../src/
โ”œโ”€โ”€ dir1
โ”‚   โ””โ”€โ”€ file1
โ”œโ”€โ”€ dir2
โ”‚   โ””โ”€โ”€ file2
โ””โ”€โ”€ dir3
    โ””โ”€โ”€ file3


trailing slash ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด src ์˜ ๋งจ ๋’ค์— / ๋ฅผ ๋ถ™์—ฌ์ฃผ๊ณ  rsync ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค. 

$ cd src
$ for i in dir1 dir2;do rsync -avz lesstif@example.com:$PWD/$i/ /home/lesstif/backup/$i; done


๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋งŒ ๋ณต์ œ

rsync ์— -d(์†Œ๋ฌธ์ž) ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์›๋ณธ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋งŒ ๋ณต์ œํ•˜๊ณ  ์•ˆ์˜ ํŒŒ์ผ๋“ค์€ ๋ณต์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.

 $ rsync -vd  lesstif@example.com:/home/lesstif/ .


 

์ง„ํ–‰ ๋‚ด์—ญ ๋ณด๊ธฐ

--progress ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ „์†ก์‹œ ์ง„ํ–‰ ๋‚ด์—ญ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

$ rsync -avz --progress lesstif@example.com:/home/lesstif/data /home/lesstif/backup/ 

ssh๊ฐ€ 22๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ

๋ณด์•ˆ๋•Œ๋ฌธ์— SSH ๋ฅผ ๋‹ค๋ฅธ ํฌํŠธ(์˜ˆ: 10022) ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„์— ์—ฐ๊ฒฐ์‹œ ์•„๋ž˜์™€ ๊ฐ™์ด -e ๋’ค์— ssh์™€ ์—ฐ๊ฒฐํ•  ํฌํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

$ rsync -avz --progress -e 'ssh -p 10022' lesstif@example.com:/home/lesstif/data /home/lesstif/backup/ 

ํŠน์ • ํ™•์žฅ์ž๋งŒ ์ „์†ก

ํŠน์ • ํŒŒ์ผ(์˜ˆ: pdf)๋งŒ ์ „์†กํ•  ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด include ์— ๋ชจ๋“  ํŒŒ์ผ์„ ์˜๋ฏธํ•˜๋Š” * ๋ฅผ ์จ์ฃผ๊ณ  ๊ทธ ๋‹ค์Œ์— ์ „์†กํ•  ํŒŒ์ผ ์ข…๋ฅ˜(--include=*.pdf) ๋ฅผ ์ ์–ด์ค€ ํ›„์— ๋งˆ์ง€๋ง‰์— --exclude=* ๋กœ ๋ชจ๋“  ํŒŒ์ผ์„ ์ œ์™ธํ•ด์ฃผ๋ฉด ์˜๋„ํ•œ ๋Œ€๋กœ ๋™์ž‘

$ rsync -zarv --prune-empty-dirs  --include="*/" --include="*.pdf" --exclude="*" "$from" "$to"



๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ์ œ์™ธ

USB ๋ฅผ ๋งˆ์šดํŠธํ•ด์„œ ๋ณต์‚ฌํ•  ๊ฒฝ์šฐ ํœด์ง€ํ†ต์ด๋‚˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ์ดํƒ€๋“ฑ์˜ ๋ถˆ ํ•„์š”ํ•œ ํŒŒ์ผ์€ --exclude ์˜ต์…˜์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์„œ ์ œ์™ธํ•ด์•ผ ํ•œ๋‹ค. ์•„๋ž˜ gist ๋ฅผ ์ฐธ๊ณ  

 Click here to expand...


symbolic link ์ฒ˜๋ฆฌ

์‹ฌ๋ธ”๋ฆญ ๋งํฌ์˜ ๊ฒฝ์šฐ link ๋กœ ์ฒ˜๋ฆฌ(--link)ํ•˜๊ฑฐ๋‚˜ ์›๋ณธ์„ ๋”ฐ๋ผ๊ฐ€์„œ ์›๋ณธ์„ ๋ณต์‚ฌ(-L), ๋˜๋Š” ์ œ์™ธ(--no-links)ํ•˜๋Š” 3๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ๋‹ค.

link ๋กœ ์ฒ˜๋ฆฌ
rsync -avz --link --progress  lesstif@example.com:/home/lesstif/data /home/lesstif/backup/ 
์ฐธ์กฐํ•˜๋Š” ์›๋ณธ ๋ณต์‚ฌ
rsync -avz -L --progress  lesstif@example.com:/home/lesstif/data /home/lesstif/backup/ 
link ๋Š” ์ œ์™ธ
rsync -avz --no-links --progress  lesstif@example.com:/home/lesstif/data /home/lesstif/backup/ 

-a ์˜ต์…˜ ์‚ฌ์šฉ์‹œ --no-links, -L, --link ์˜ต์…˜์€ -a ๋’ค์— ์™€์•ผ ํ•จ


ํŒŒ์ผ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ๊ธฐ(overwrite)

rsync ๋Š” ํŒŒ์ผ์ด ๋ชฉ์ ์ง€์— ์กด์žฌํ•  ๊ฒฝ์šฐ ์ƒ์„ฑ ์‹œ๊ฐ„๊ณผ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•ด์„œ ๋™์ผํ•  ๊ฒฝ์šฐ ๊ฑด๋„ˆ๋œ€.

-I, --ignore-times ์˜ต์…˜์„ ์ฃผ๋ฉด ์ƒ์„ฑ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฎ์–ด์“ฐ๊ธฐ์™€ ๋™์ผํ•œ ํšจ๊ณผ ๋ฐœ์ƒ

ํŒŒ์ผ ๋ฎ์–ด์“ฐ๊ธฐ
rsync -avz -I --progress  lesstif@example.com:/home/lesstif/data /home/lesstif/backup/ 


๊ฐ™์ด ๋ณด๊ธฐ

Ref