나는 두 대의 기계를 가지고 A
있고 B
. A
SSH를 통해 머신 에 액세스할 수 있습니다 B
. A
사용 가능한 공간이 많이 있습니다. B
데이터가 위험한 상황에 있습니다. B
모든 데이터를 자동으로 백업하는 방법 A
.매우 자주 수행할 필요는 없지만 핸즈프리여야 합니다. 모든 A
시작은 충분히 빈번합니다. 동기화가 가능하다고 들었습니다.
답변1
대부분의 Linux 배포판에서 매일 이 작업을 수행하려면 다음 명령을 입력하면 됩니다 rsync
.@guido의 답변)를 스크립트에 추가하고 해당 스크립트를 /etc/cron.daily
디렉터리에 넣습니다. anacron
설치되어 있는 한 (기본적으로는 그렇지 않을 수 있음) cron.daily
다음에 컴퓨터가 시작될 때(또는 컴퓨터가 전환되면 자정에 실행될 때) 누락된 작업이 모두 포착됩니다.
스크립트의 경우 다음을 수행하면 됩니다.
#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder
-z
백업이 느린 연결을 통해 이루어지거나 대역폭을 절약하려는 경우 (압축) 옵션을 추가할 수 있지만 제 경험상 실제로는 최신 시스템/네트워크의 성능을 저하시킬 수 있습니다.
각 백업의 로그를 유지하려면 다음을 수행할 수 있습니다.
#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
>/var/log/backup_log 2>&1
이것이 cron 작업으로 작동하려면 다음이 있어야 합니다.비밀번호 없는 SSH로 설정뿌리서버A에서 서버B에 로그인합니다. 작업이 루트로 실행되므로 루트 계정(즉, 유형 /root/.ssh
) 이어야 합니다.cron.daily
답변2
나는 사용하는 것이 좋습니다rdiff 백업. 이제 저는 이를 사용하여 매일 밤 내 데이터(워크스테이션 2개, 서버 2개, 다른 사람 서버의 계정)를 자동으로 증분 백업합니다.
이전에 rsync를 사용한 적이 있지만 더 편리하고 가상 머신 디스크 이미지와 같은 대용량 파일의 증분 백업을 수행할 수 있기 때문에 rdiff-backup으로 전환했습니다. rdiff-backup은 이전 rsync 백업 스크립트와 매우 비슷하지만 완료되었습니다.옳은.
스크립트 파일을 넣었어요/etc/cron.daily백업이 저장된 머신에서는 매일 아침 rdiff-backup이 시작되고 원격 머신에서 데이터를 가져옵니다.
답변3
이전의 모든 답변 외에도 다음은 SSH 키에 의존하는 답변입니다. 이는 해당 키로 로그인할 때 수행할 수 있는 작업을 제한합니다.
서버 A에서
이 시점에서는 별도의 사용자를 만들거나 기존 사용자 이름 중 하나를 사용하는 것이 중요하지 않습니다. 하지만 저라면 별도의 사용자를 만들 것입니다. bkpuser
아래 예에서는 두 서버 모두에 대한 사용자 이름을 사용 하겠습니다 .
로그인 후 bkpuser
비밀번호 없이 SSH 키를 생성하세요.
서버 B에서
PubkeyAuthentication
에서 활성화되었습니다 sshd_config
.
사용자를 생성하십시오 bkpuser
. 매우 복잡한 비밀번호를 설정하거나 이 사용자에 대한 비밀번호 로그인을 비활성화하십시오(이 작업을 수행하는 방법은 실행 중인 유닉스 및 배포판에 따라 다릅니다). 중요한 점은 사용자가 SSH 키를 통해서만 로그인할 수 있다는 것입니다. bkpuser
백업하려는 모든 디렉터리와 파일에 대한 읽기 권한이 있는지 확인하세요 .
A에서 생성된 키의 공개 부분을 ~bkpuser/.ssh/authorized_keys
B 에 복사합니다. 연결 시 자동으로 명령을 실행하도록 편집되었습니다. 이 명령은 쉘 스크립트에 대한 포인터가 되어서는 안 됩니다. 대신 쉘 스크립트가 키에 직접 삽입됩니다. 또한 키를 서버 A에서만 사용할 수 있고 다른 서버에서는 사용할 수 없도록 제한 사항도 포함합니다. 아래 예에서는 서버 A의 IP 주소를 제공 10.1.2.3
하고 백업하려는 파일이 에 있다고 가정합니다 /data
.
from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....
서버 A에서
항목을 지원하는 cron 탭 중 하나를 사용하는 경우 명령을 사용하여 @reboot
해당 항목을 s crontab에 추가하십시오. 허용되지 않는 경우 언제든지 설정할 수 있습니다. 내 데이터라면 아마도 매일 이 작업을 수행할 것입니다.bkpuser
ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz
답변4
rsync를 사용하여 이를 달성할 수 있습니다(역방향).
serverA# rsync -avz user@serverB:/path-to-backup.tar.gz /var/backup
어디:
-avz archive, compress and be verbose