원격지의 리눅스 서버에 ESXi의 vm guest의 vmdk 파일등을 rsync로 백업하는 방법에 대한 설명이다.
목차
사용된 서버
- ESXi Host : ESXi 6.7
- Linux Server : CentOS 4.7
rsync 파일 구하기
ESXi 는 기본적으로 rsync가 설치되어 있지 않다. 따라서 먼저 ESXi에 맞는 rsync를 복사해 준다.
아래 사이트를 참고했다.
rsync on ESXi 6.5
https://communities.vmware.com/thread/599782
-> I was searching for this myself, found a precompiled binary that works on 6.7.
ESXI Rsync.zip 파일을 다운 받는다.
위 zip 파일의 압축을 풀면 rsync-static 바이너리 파일을 확인할 수 있다.
압축 파일에 추가로 포함된 2개의 파일
- rsync.xml 파일은 esxi host 의 firewall에서 873 포트를 개방하는데 사용,
- install.sh 파일은 바이너리 배치 및 rsync.xml 정책 적용에 대한 스크립트 파일이다.
ESXi에서 필요한 서비스
본인은 esxi 서버를 rsync 를 deamon 모드로 돌리지 않고 ssh를 통해 rsync 바이너리만 이용하는 방법으로 rsync를 이용할 것이다.
따라서 esxi 호스트는 sshd 서비스 동작과 ssh 포트만 개방되어 있으면 된다.
만약 esxi 호스트를 rsync 데몬 서버로 돌리고 싶다면 rsync.xml 정책을 적용해야 할 것이다.
rsync-static 업로드
그림과 같이 datastore 적당한 곳에 rsync-static을 업로드 한다.

그리고 ssh를 통해 esxi 쉘로 접속을 해서 아래 작업 수행
rsync 파일 복사
복사 및 퍼미션 변경
# cp /vmfs/volumes/SE02/_bin/rsync-static /bin/rsync # chmod 555 /bin/rsync
rsync-static 파일명은 rsync로 변경해서 복사한다.
local.sh 등록
# vi /etc/rc.local.d/local.sh . . cp /vmfs/volumes/SE02/_bin/rsync-static /bin/rsync chmod 555 /bin/rsync exit 0
/bin에 파일을 넣으면 esxi 재부팅 후 사라지기 때문에 datastore의 rsync-static 바이너리 파일을 local.sh을 통해 부팅시마다 /bin 디렉토리에 복사를 하게 만든다.
cp, chmod 두 줄만 추가하면 된다.
리눅스 서버에서..
sshpass 설치
리눅스 (CentOS 4) 에 아래와 같이 sshpass를 설치 한다.
# rpm -ivh sshpass-1.05-1.el4.rf.i386.rpm 경고: sshpass-1.05-1.el4.rf.i386.rpm: V3 DSA signature: NOKEY, key ID 6b8d79e6 준비 중... ########################################### [100%] 1:sshpass ########################################### [100%]
sshpass는 명령행에 패스워드를 넣어서 ssh 접속을 하기 위해 필요하다.
sshpass는 google에서 검색해서 다운받아 설치하면 됨.
crontab 설정
# crontab -e 30 23 * * 0 /usr/bin/sshpass -p 'MyPassword' rsync --progress -av --exclude='*.vswp' --delete -e 'ssh -p 2522' my.domain.com:/vmfs/volumes/SE02/mws/ /data0/mws 2> /var/log/rsync7.log
리눅스 서버에서 위와 같이 설정
cron에 설정된 시간에 vm guest 파일들을 가져오는것을 확인할 수 있을 것이다.
* 설정 옵션 설명
--exclude='*.vswp' :: *.vswp (guest OS의 메모리 스왑 파일)은 제외
--delete :: 변경된 데이터 업데이트를 위함
-p 2522 :: esxi 호스트의 ssh 포트 정의
2> /var/log/rsync7.log :: 에러 메시지를 별도의 로그로 저장
아래와 같은 명령어 조합으로도 동일하게 동작한다.
# rsync -av --delete --exclude='*.vswp' --rsh='sshpass -p MyPassword ssh -l root -p 2522' my.domain.com:/vmfs/volumes/SE02/mws/ /data0/mws
본인이 rsync로 백업하는 vm은 고작 12G 짜리다. 대상이 이 블로그 서버이고 원격지에 DR 개념으로 백업하는 것이다.
개인적으로 이 방법은 VM Guest OS의 사이즈가 작을때나 유용할 것 같다.