와 데이터를 동기화합니다 rsync --delete --backup --backup-dir=[some directory] -avz [source] [destination]
.
- rsync를 실행하는 머신에서 디렉터리
[source]
는[destination]
로컬로 마운트된 NFS 내보내기입니다(즉, rsync를 실행하는 머신은 NFS 클라이언트입니다). - 성공
rsync
+ 일부 확인 후 백업이 삭제되었습니다.
내 LAN의 또 다른 시스템은 애플리케이션 서버이며 [destination]
동일한 NFS 내보내기가 로컬로 설치되어 있습니다. 응용 프로그램 측면의 복잡성으로 인해통제할 수 없다위에서는 애플리케이션이 이름을 사용하는 대신 inode로 파일을 참조하는 것처럼 보입니다. 파일이 다음에서 변경될 때 문제가 발생할 수 있습니다 [source]
.
[destination]
파일에 inode가 있다고 가정123
- 애플리케이션은 inode가 있는 파일을 "가리킵니다".
123
[source]
rsync가 이 파일의 버전과 버전 간의 차이를 감지하여[destination]
파일을 전송해야 합니다.- 전송하기 전에 "이동"하여 백업을 생성합니다. 이제 백업 파일에 inode가 있습니다.
123
- 파일의 업데이트된 버전이 rsync에 의해 전송되고 새 inode가 획득됩니다(
456
). - rsync + 확인이 성공적으로 완료되면 백업이 삭제됩니다. 더 이상 파일에
123
inode 가 없습니다. 123
애플리케이션이 여전히 손상된 inode를 가리키고 있습니다.
rsync --backup
그것이 어떻게 작동하는지와 inode가 어떻게 작동하는지 내가 이해하고 있습니까 ?- rsync 옵션을
--inplace
사용하는 방법--backup
:
- rsync는 자체 inode를 사용하여 백업 파일을 생성합니까?
- 파일이 현재 inode를 유지합니까?
답변1
inode를 통해 파일을 참조하는 것은 거의 불가능합니다. 파일을 열려면 디렉터리에서 파일 이름에 대한 참조를 열어야 합니다. 그런 다음 이제 파일 이름과 독립적인 파일 핸들이 있습니다(이것이 파일이 파일 시스템에서 삭제될 수 있지만 여전히 열려 있고 활성 상태인 이유입니다). 따라서 우리는 응용 프로그램의 수명 동안 파일이 열려 있다고 가정합니다. 이제 이 파일의 내용을 rsync
.
일반적으로 rsync
대상 파일의 임시 복사본은 기존 인스턴스와 함께 생성된 다음 마지막 순간에 원본 파일이 삭제(또는 백업)되고 대체 파일로 전환됩니다. 이 동작은 이 옵션을 사용하여 수정하여 --inplace
새 복사본이 생성되지 않고 대신 rsync
실제 대상이 기록되도록 할 수 있습니다.
이제 을 지정하므로 --backup
올바른 작업을 수행하고 rsync
원본 인스턴스가 업데이트되도록 허용하기 전에 백업 복사본을 생성하십시오. --inplace
간단한 예를 통해 이를 이해할 수 있습니다.
# Prepare scenario
mkdir /tmp/624404
cd /tmp/624404
date >src
cp -p src dst
# Initial files, with inodes
ls -li src dst
149172 -rw-r--r-- 1 roaima 29 Dec 14 11:49 dst
137559 -rw-r--r-- 1 roaima 29 Dec 14 11:49 src
# Update, copy, and list
date >src
rsync --times --inplace --backup src dst
ls -li
total 12
149172 -rw-r--r-- 1 roaima 29 Dec 14 11:50 dst
149194 -rw-r--r-- 1 roaima 29 Dec 14 11:49 dst~
137559 -rw-r--r-- 1 roaima 29 Dec 14 11:50 src
# Update again, copy, and list
date >src
rsync --times --inplace --backup src dst
ls -li
total 12
149172 -rw-r--r-- 1 roaima 29 Dec 14 11:50 dst
149194 -rw-r--r-- 1 roaima 29 Dec 14 11:50 dst~
137559 -rw-r--r-- 1 roaima 29 Dec 14 11:50 src
대상( dst
) 파일에는 여전히 원래 inode가 있지만 백업에는 새 inode가 부여된 것을 볼 수 있습니다. 두 번째 업데이트에서는 inode가 이후 유지되었음을 보여줍니다.
--inplace --backup
귀하의 경우 이것이 바로 귀하에게 필요한 것 같습니다 . 그러나 매뉴얼 페이지 경고에 유의하십시오.
경고: 다른 사람이 액세스하는 파일을 업데이트하는 데 이 옵션을 사용해서는 안 되므로 이 옵션을 사용하여 복사본을 만들 때는 주의하십시오.
기본값이 아닌 이유는 --inplace
중단된 부분 복사로 인해 대상 파일이 일관되지 않은 상태로 남을 수 있으며 작성자는 손상된 최신 파일보다 내부적으로 일관된 오래된 파일을 갖는 것이 더 낫다고 믿기 때문입니다. 이러한 동작은 및 ( 버전 3.0.0 에서도 ) --inplace
와 같은 플래그를 사용하여 수정할 수 있습니다 .--partial
--append
rsync