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 ๋ผ๋ ํ์ ํด๋๊ฐ ์๋ค๊ณ ๊ฐ์ ใ ํด ๋ณด์.
$ 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 ๋ฅผ ์ฐธ๊ณ
symbolic link ์ฒ๋ฆฌ
์ฌ๋ธ๋ฆญ ๋งํฌ์ ๊ฒฝ์ฐ link ๋ก ์ฒ๋ฆฌ(--link)ํ๊ฑฐ๋ ์๋ณธ์ ๋ฐ๋ผ๊ฐ์ ์๋ณธ์ ๋ณต์ฌ(-L), ๋๋ ์ ์ธ(--no-links)ํ๋ 3๊ฐ์ง ์ต์ ์ด ์๋ค.
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/
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/
๊ฐ์ด ๋ณด๊ธฐ
- scp, ssh, rsync ๋ฅผ key ๋น๋ฐ ๋ฒํธ/์ํธ ์ ๋ ฅ์ฐฝ ์์ด ์ฌ์ฉํ๊ธฐ
- rsync - deprecated - ๋ฆฌ๋ ์ค๋ฅผ ํ์ฉํ ์ธํ๋ผ ๊ตฌ์ถ์ ๋ชจ๋ ๊ฒ์ค
Ref
- http://www.thegeekstuff.com/2010/09/rsync-command-examples/
- http://www.tecmint.com/rsync-local-remote-file-synchronization-commands/