ssh와 rsync를 이용한 백업
리눅스 시스템 사이에서 백업을 해야 할일이 생겨서 이것저것 찾아 보다가..
rsync를 사용하기로 했습니다.
우선 ssh를 통해서 rsync 백업을 할려고 하면, password를 묻습니다.
한번씩 할 때는 패스워드를 치면 상관없지만, crontab을 사용해서 주기적으로 할려고 하면 문제가 발생합니다.
해결하는 방법을 이것저것 찾았는데 2가지 정도가 나오네요.
첫번째는 ssh-keygen을 통해서 패스워드를 묻지 않게 하는 방법 입니다.
# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): <ENTER>
Enter passphrase (empty for no passphrase): <ENTER>
Enter same passphrase again: <ENTER>
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
58:bd:ef:fd:3b:62:79:2e:ea:de:c4:73:2d:7d:11:2b root@web-tl
The key's randomart image is:
+--[ DSA 1024]----+
| |
| . |
| . . . |
| o . o|
| . S . E o |
| .. ..o|
| .+o.+|
| .o*o+.|
| o++.*++|
+-----------------+
# cat ~/.ssh/id_dsa.pub | ssh [원격ID]@[원격HOST] "cat >> .ssh/authorized_keys"
password: 암호입력<ENTER>
# _
이렇게 설정을 해 두면, 해당 원격 서버에 접속할때 암호를 전혀 묻지 않게 됩니다.
# rsync -avzP -e ssh [원격HOST]:/home/source /home/target
이런식으로 백업 하시면 됩니다.
하지만, 뭔가 찝찔하죠..
누구나 이 자리에 앉으면 패스워드를 몰라도 원격 호스트에 접근을 할 수 있게 되죠...
두번째는 sshpass를 사용해서 접근하는 방법니다.
CentOS나 fedora에서는 기본 yum해서는 들어 있지 않습니다.
아래와 같이 epel을 통해서 받습니다.
# sudo su -
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
# yum update
# yum -y install sshpass
이렇게 설치해 주시면 됩니다.
Ubuntu를 쓰시는 분들은 apt-get으로 받으세요.
# sudo apt-get install sshpass
sshpass을 사용법을 알아보면.. 아래와 같습니다.
sshpass -p '[암호]' ssh [원격ID]@[원격HOST]
# sshpass -p 'myPassword' ssh username@server.example.com
이런식이죠...
그러면, 이걸로 rsync를 해 봐야 겠죠?
# rsync --rsh="sshpass -p myPassword ssh -l username" server.example.com:/var/www/html/ /backup/
이렇게
하시면
됩니다.
참
쉽죠?
여기서
주기적으로
백업을
하고
싶다면..
# crontab -e
이렇게
뛰우시고
내용을
수정하시면
됩니다.
*/5 * * * * rsync --rsh="sshpass -p myPassword ssh -l username" server.example.com:/var/www/html/ /backup/
이렇게
해
두면 5분
주기로
백업이
진행
됩니다.
출처 - http://gyuha.tistory.com/445
Linux 에서는 rsync 라는 훌륭한 명령어가 있다.
회사에서 혹은 집에서 Linux Server 가 있다면, rsync 를 이용하여 자신의 중요한 자료를 백업할 수 있다.
백업서버에 설치되어야 할 프로그램은 rsync, ssh server 이다.
백업서버를 위한 운영체제는 Ubuntu 혹은 Debian 이라고 가정한다.
여기서 Debian 을 중심으로 설명을 하겠다. :) (Ubuntu 에서는 sudo 혹은 root 권한을 획득하여 프로그램을 설치 하도록 한다.)
백업서버를 설정하는 방법은 총 3단계로 나눌 수 있다.
root@outland:/home/starbloood/# apt-get install ssh |
● 백업서버에 백업할 사용자의 홈 디렉토리에 .ssh 디렉토리를 생성한다.
starblood@outland:~$ mkdir .ssh |
● 클라이언트 PC 에서 아래와 같은 명령어로 public key 를 발급받는다.
starblood@northrend:~$ ssh-keygen -t rsa |
● 클라이언트의 public key 를 백업 서버로 전송한다. (public key 파일을 authorized_keys 파일로 이름을 바꾼다.)
starblood@northrend:~$ scp .ssh/id_rsa.pub starblood@outland:~/.ssh/authorized_keys |
root@outland:/home/starblood# apt-get install rsync |
root@outland:/home/starblood# vi /etc/default/rsync |
# defaults file for rsync daemon mode
# start rsync in daemon mode from init.d script? # only allowed values are "true", "false", and "inetd" # Use "inetd" if you want to start the rsyncd from inetd, # all this does is prevent the init.d script from printing a message # about not starting rsyncd (you still need to modify inetd's config yourself). RSYNC_ENABLE=false <= 이부분을 true 로 바꾸어 준다.
# which file should be used as the configuration file for rsync. # This file is used instead of the default /etc/rsyncd.conf # Warning: This option has no effect if the daemon is accessed # using a remote shell. When using a different file for # rsync you might want to symlink /etc/rsyncd.conf to # that file. # RSYNC_CONFIG_FILE= |
root@outland:/home/starblood# /etc/init.d/rsync restart |
starblood@northrend:~$ vi backup.sh |
#!/bin/bash # Backup my precious documents my Backup Server(Debian) # Backup documents rsync -a -e ssh --delete documents/ starblood@outland:~/backup/Users/starblood/documents/ |
starblood@northrend:~$ chmod +x backup.sh |
starblood@northrend:~$ ./backup.sh |
백업 스크립트는 자신의 환경에 맞게 알맞게 수정하여 사용하면 된다. :)
출처 - http://blog.naver.com/johnforstar?Redirect=Log&logNo=30129627928
rsync3로 고속으로 diff 풀 백업
rsync --link-dest --rsync-path 등
<cite style="font-weight: bold; font-style: normal; ">hkataoka의 대충쓴 일기</cite>
결국 이렇게 되었다(현 단계에서 메모)
CMD=/usr/local/bin/rsync
STRAGE=/var/backup
OLDEST=`date --date '7 days ago' +%Y%m%d`
LATEST=`date --date '1 days ago' +%Y%m%d`
for HOST in
`ls $STRAGE`;
do
if
[
-f
$STRAGE/$HOST
]
;
then
continue
fi
HOSTNAME=`cat $STRAGE/$HOST/hostname.txt`
echo
"backup start : $HOSTNAME"
if
[
-d
$STRAGE/$HOST/$OLDEST
]
;
then
rm -fr $STRAGE/$HOST/$OLDEST
fi
if
[
-d
$STRAGE/$HOST/current ]
;
then
mv
$STRAGE/$HOST/current $STRAGE/$HOST/$LATEST
fi
$CMD -az --delete \
--link-dest="../$LATEST/" \
--rsync-path="sudo $CMD" \
--exclude-from=$STRAGE/$HOST/excludes.txt \
backup@$HOST:/ $STRAGE/$HOST/current/
done;
로칼IP랑 동일한 명칭으로 디렉토리를 작성하면 백업 대상으로소 등록 되는 구조
#-------------------------
# 초기설정
#-------------------------
scp backup.sh root@192.168.1.177:
ssh root@192.168.1.177
ssh-keygen -t rsa
useradd -G wheel backup
passwd backup
# rsync3 인스톨
cd /usr/local/src/
wget http://rsync.samba.org/ftp/rsync/rsync-3.0.7.tar.gz
tar xzfv rsync-3.0.7.tar.gz
cd rsync-3.0.7
./configure
make
make install
#-------------------------
# 타겟마다 설정
#-------------------------
ssh work@192.168.1.172
su -
# rsync3 인스톨
cd /usr/local/src/
wget http://rsync.samba.org/ftp/rsync/rsync-3.0.7.tar.gz
tar xzfv rsync-3.0.7.tar.gz
cd rsync-3.0.7
./configure
make
make install
# 백업유저 추가, sudo설정
useradd backup
visudo
backup ALL= NOPASSWD:/usr/local/bin/rsync
# 필요에 따라 공개키인증을 유효화 한다
vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 백업 서버로 부터 공개키인증으로 로그인이 가능하도록 한다.
su - backup
vi ~backup/.ssh/authorized_keys
출처 - http://blog.naver.com/parkjy76?Redirect=Log&logNo=30135329075
리눅스 서버는 별도의 건물에 있고, 각종 외장 하드는 책상 주변에 있으니, 윈도우 데스크탑에서 리눅스 서버의 자료를 백업할 방법을 효과적인 방안을 모색해야 한다. ftp로 접속하여 파일을 가져오는 것은 대단히 미련하다. 항상 "전체 백업"만 해야 되기 때문이다. 리눅스쪽의 하드 디스크 드라이브를 samba를 이용하여 윈도우쪽에 연결한 뒤 SyncBack으로 백업하는 방법도 생각해 보았다. 그러나 samba 설정이 생각보다 어렵다. 분명히 대학원 시절에는 성공했었던 것 같은데, 보안 설정이 예전보다 까다로워진 모양일까, 잘 안된다.
그러면 반대의 방법으로 윈도우쪽 백업 매체를 공유로 설정한 뒤 리눅스에서 마운트한 다음 rsync로 백업하는 방법도 있다. 최종적으로 성공한 방법은 이것이다. 다음의 절차에 따르도록 한다.
- 탐색기->폴더옵션->보기->고급 설정에서 "모든 사용자에게 동일한 폴더 공유 권한을 지정(권장)"이 해제되어 있는지 확인한다.
- 제어판->관리 도구->컴퓨터 관리->로컬 사용자 및 그룹->사용자에서 오른쪽 마우스 버튼을 눌러 "새 사용자"를 연다. 새 사용자를 등록하되 "다음 로그온할 때 반드시 암호 변경"을 해제하고 "암호 사용 기간 제한 없음"을 설정한다.
- 백업 매체가 될 폴더의 공유를 설정한다. 공유 이름(share name)을 잘 기억해 둔다. 사용자 이름에서 Everyone은 제거하고, 새로 추가한 사용자를 넣되 모든 권한을 준다.
- 이제 리눅스쪽에서 다음과 같이 입력하여 마운트한다.
mount -t cifs -o username=<user_name>,passwd=<password> //<IP address>/<share_name> <mount할 위치>
CIFS(Common Internet File System)는 처음 접하는 파일 시스템 타입이다.
마운트가 끝났으면 rsync를 이용하여 작업하면 된다. 마치 리눅스 머신 안에서 파일들을 옮기는 것과 다를 바가 없으므로, rsync 서버의 설정은 필요 없이 오직 client만으로 작동할 수 있다.
rsync -avz src/bar /mnt/win/backup
이렇게 하면 목적지인 /mnt/win/backup 아래에 bar라는 디렉토리가 생기면서 옮겨지게 된다.
rsync -avz src/bar/ /mnt/win/backup
원본 디렉토리 뒤에 슬래쉬를 붙이면 결과가 달라진다. /mnt/win/backup 아래에 bar 디렉토리를 만들지 않고, 대신 bar 디렉토리의 내용물을 옮기게 된다.
만일 원본에 더 이상 존재하지 않는 파일을 타겟에서도 제거하려면 다음과 같이 한다. 일종의 동기화인 셈이다.
rsync -avz --delete src/bar /mnt/win/backup
경험상 원본 파일을 tar로 묶어 버린 뒤 ftp로 옮겨 버리는 것이 가장 쉽고도 빠른 방법이었다. 그러나 이 방법은 원본이 변경된 경우 전체 백업을 새로 해야 하므로 백업 유지가 매우 불리해진다. rsync를 이용하면 파일과 디렉토리 구조에 전혀 신경을 쓰지 않아도 되는 장점이 있으나, 원본과 타겟을 스캔하고 파일 하나씩을 옮기는 데 시간이 좀 걸린다. 특히 phd file과 같이 한 디렉토리 안에 많은 수의 파일이 있을 때에는 스캔과 복사에 상당한 시간이 소요된다.
생산된지 오래 되어 잘 쓰지 않게 된 파일은 묶어 두고, 작업 중인 자료들은 폴더 구조를 유지한 채 rsync로 정기적 백업을 하는 것이 가장 적당할 듯.
[출처] 리눅스쪽의 자료 백업하기(윈도우 공유 폴더와 rsync 이용)|작성자 따봐
'System > Linux' 카테고리의 다른 글
리눅스 파운데이션 ( The Linux Foundation ) (0) | 2012.04.08 |
---|---|
리눅스 3.0 발표 (0) | 2012.04.08 |
JDK & OpenJDK (0) | 2012.04.05 |
/etc/profile, ~/.bash_profile, ~/.bashrc, /etc/bashrc (0) | 2012.04.05 |
CentOS 기본 설치 방법 옵션별 패키지 (0) | 2012.03.31 |