원격 계정의 홈 디렉터리를 백업하고 복원하고 싶습니다.
내가 사용하는 명령은 다음과 같습니다
지원
ssh [email protected] "tar jcf - ." > backup.tar.bz2
다시 덮다
cat backup.tar.bz2 | ssh [email protected] "tar jxf - ."
복원 프로세스 중에 서버를 다시 시작하더라도 모든 파일이 복원되는지 확인하고 싶습니다.
내가 원하는 것을 달성할 수 있는 방법이 있나요? 위에 표시된 명령을 기본으로 유지하고 싶지만 다른 아이디어도 높이 평가됩니다.
답변1
진정한 원자성을 얻으려면 다음과 같은 파일 시스템 수준 기능을 사용해야 합니다.Btrfs 스냅샷.
답변2
복구가 완료된 후 일부 마커 파일을 사용할 수 있습니다. 복구가 불완전하고 표시된 파일이 누락된 경우 불완전 복구를 삭제해야 한다는 것을 알고 있습니다.
답변3
rsync
파일을 수동으로 백업하는 대신 사용하는 것이 좋습니다 . 이 도구를 사용하면 몇 가지 추가 기능을 사용하여 현재 수행 중인 작업을 수행할 수 있습니다. 예를 들어 매개변수를 전달하여 --progress
마지막으로 복사된 파일을 알 수 있습니다.
또 다른 기능은 새 파일이나 수정된 파일만 복사할 수 있다는 것입니다. 이를 통해 네트워크를 통해 전송되는 데이터의 양이 줄어듭니다. 이 매개변수를 설정하면 --delete
폴더에서 삭제한 파일이 삭제됩니다.원천폴더. 마지막으로 -z
매개변수는 압축을 활성화합니다.
명령의 구조는 다음과 같습니다.
$ rsync options source destination
예
rsync --progress -azv -e ssh --delete /home/guandalino/ \
[email protected]:/home/guandalino/backup/guandalino/
어디
--progress
rsync 실행의 자세한 진행 상황 표시-z
압축 활성화-v
길다는 뜻-a
재귀를 나타냅니다. 또한 권한, 소유자, 그룹 등도 유지됩니다.--delete
소스 디렉터리에 존재하지 않는 파일을 삭제합니다.
확인 해봐예.
백업 예약
이 부분은 추가 사항입니다. 이것이 내 홈 폴더를 서버에 자동으로 백업하는 데 사용하는 방법입니다. 위의 예제를 쉘 스크립트 파일에 넣고 cron
매일 오전 00시에 실행되도록 활성화했습니다.
00 00 * * * /home/guandalino/backup_home_folder.sh 2>&1 >> /var/log/backup_home_folder.log
전송 로그를 유지할 수 있도록 스크립트 출력을 파일로 리디렉션합니다. ssh-keygen -t rsa
아직 공개 키가 없다면 클라이언트가 비밀번호를 입력하지 않고도 서버에 연결할 수 있도록 공개 키를 생성해야 합니다.
답변4
직접적으로는 아닙니다. 가장 좋은 방법은 임시 디렉터리를 복원하고 확인한 다음 이름을 바꾸는 것입니다. 이름을 바꾸면 파일이 자동으로 올바른 위치로 이동됩니다.