rsync란
서로 다른 두 컴퓨터에 컴퓨터에 들어 있는 데이터를 서로 동기화 시킬때 사용한다. 동일한 소스가 두군대 존재하고 한쪽을 편집했을때, 다른 한쪽에 편집한 부분을 업데이트 시켜줘야 한다. 이때 rsync는 수정된 부분만 비교해서 백업해 주게 된다.
예를들어 나같은 경우 Data의 대부분을 cloud 서버에 저장한다.(HDD1) 하지만 HDD가 망가지거나, 서버의 데이터가 손상될경우 대비하기 위해서 rsync로 다른 서버(HDD2)에 데이터를 증분백업할때 rsync를 사용하려고 한다.
rsync 는 보통 rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST 이러한 형태로 사용하게 되는데
-a, --archive archive mode
-v, --verbose increase verbosity
-z, --compress compress file data
-u, --update update only (don't overwrite newer files
ex)클라우드 서버의 data 폴더를 이동한다고하면
rsync data user-id@192.168.x.x:/home/user-id 이런식으로 사용할 수 있다.
data에 /를 붙이면 해당 폴더가 생성되고 / 를 붙이지않으면 안에 내용물 부터 복사된다.
특정 파일/폴더를 제외하려면 --exclude="파일"을 사용하면 된다. rsync -avz --delete --exclude=".svn" root@192.168.1.1:/var/www/html
여기서 좀더 나아가서 자동화 하는방법을 알아보자.(rsync를 쓰면 password를 입력해줘야되는데 나는 cron으로 자동으로 동기화 시키려고 한다.
먼저 옮길 서버에서 ssh key를 추출해준다.
ssh-keygen -t rsa -b 4096
key를 만들었으면 이걸 목적지 서버에 전달해주면된다.
ssh-copy-id admin-sv@192.168.1.113
그리고나서 목적지 서버로 ssh를 사용해서 접근해보면 패스워드 입력을 안해도 자동으로 접속이 된다.
ssh user-id@192.168.x.x
자동화는 이제 간단해졌다 move.sh 스크립트를 만들고 안에 rsync 명령어를 넣어준다.
sh move.sh 를 실행시키면 pw 입력없이 rsync가 동작하게된다.
cron 을 통한 자동 동기화는 vi /etc/crontab