간단한 스크립트를 사용하여 rsync를 통해 로컬 Linux 스테이션(XFS 파일 시스템)에서 연결된 외부 HD(NTFS 파일 시스템)로 증분 백업을 생성합니다.
#!/bin/sh
TIMESTAMP=`date "+%Y-%m-%dT%H-%M-%S"`
USER=USER1
SOURCEDIR=/data
TARGETDIR=/run/media/sbembenek/easystore1
# Create new backup using rsync and output to log
rsync -avPh --delete --link-dest=$TARGETDIR/$USER-Current $SOURCEDIR/$USER/ $TARGETDIR/$USER-$TIMESTAMP > /archive/Backup-Logs/$USER-$TIMESTAMP.log 2>&1
# check exit status to see if backup failed
if [ "$?" = 0 ]; then
# Remove link to current backup
rm -f $TARGETDIR/$USER-Current
# Create link to the newest backup
ln -s $TARGETDIR/$USER-$TIMESTAMP $TARGETDIR/$USER-Current
else
# Rename directory if failed
mv $TARGETDIR/$USER-$TIMESTAMP $TARGETDIR/failed-$USER-$TIMESTAMP
fi
이렇게 생성된 백업 디렉터리를 "du -h -d1"을 사용하여 확인했습니다. 생성된 첫 번째 백업 디렉터리가 실제로 가장 크고 후속 디렉터리는 더 작지만 후속 디렉터리의 크기는 모두 거의 같은 것으로 나타났습니다. 즉, "기본적으로" 파일 사이에 변경된 파일이 없더라도 후자의 디렉토리가 전자보다 훨씬 작은 것을 본 적이 없습니다. 크기에 따라 백업이 증분 백업에 비해(첫 번째 백업과 비교하여) 더 차별화되는 것처럼 보였습니다.
설상가상으로 다른 백업 세트의 경우 모든 백업 디렉터리가 초기 백업과 동일합니다. 내가 무엇을 놓치고 있나요?
답변1
나는 당신의 솔루션이 아마도 해야 할 일을 하고 있다고 말하고 싶습니다.
몇 가지 코드 문제가 있습니다. 모든 변수를 큰따옴표로 묶어야 합니다(예: ) ln -s "$TARGETDIR/$USER-$TIMESTAMP" "$TARGETDIR/$USER-Current"
. 내가 아는 한, 당신은 완전히 변했습니다 rsnapshot
.
혼란은 파일 하드 링크에서 비롯된 것 같습니다. 하드 링크는 파일이 디렉토리에 있는 것처럼 보일 뿐만 아니라 실제로는예이 디렉토리에. 각 백업은 전체 백업 세트의 복사본처럼 보이지만 자세히 살펴보면 백업 세트 간에 변경되지 않은 파일은 하나의 스토리지 인스턴스만 사용한다는 것을 알 수 있습니다. 100GB 백업이 있고 90% 손상되지 않은 경우 두 개의 백업 세트가 110GB만 차지할 수 있지만 개별적으로 측정할 경우 각 백업 세트는 100GB를 사용합니다.
이 du
명령은 파일 사용량을 한 번만 계산하므로 백업 계층 전체에서 이를 사용하여 백업 세트 간의 실제 차이점을 확인할 수 있습니다.
예
# The same file, linked
ls -l top/dir?/*
-rwxrwx---+ 2 roaima roaima 1690442768 May 2 17:56 top/dir1/file.mp4
-rwxrwx---+ 2 roaima roaima 1690442768 May 2 17:56 top/dir2/file.mp4
# First directory
du -hs top/dir1
1.6G top/dir1
# Second directory
du -hs top/dir2
1.6G top/dir2
# Both directories, but each file is counted only once
du -hs top/dir?
1.6G top/dir1
0 top/dir2
# All directories, but each file is counted only once
du -hs top
1.6G top
귀하의 예에서 이것을 시도하십시오
du -hs "$TARGETDIR"/*
답변2
rsync 이전에는 delta의 경우 rsync에 대한 참조 지점을 제공하는 cp -al을 수행합니다. cp -al(복사 대신 하드 링크 아카이브 사용) 원본 파일을 가리키는 하나 이상의 하드 링크가 있는 한 파일은 그대로 유지됩니다.
예를 들어. cp -al lastbkup newbackup 다음 newbackup과 rsync
답변3
파일 권한은 일반적으로 기본적으로 all 777(rwx to all)로 변환되기 때문에 NTFS-3g로 rsync할 때 문제가 있습니다. 따라서 권한 644로 파일 A를 복사하면 첫 번째 복사본은 777A가 됩니다. 두 번째 복사본이 777A이더라도 원본 파일은 여전히 644A이므로 이후 복사본은 이 파일에 연결할 수 없습니다. rsync는 소스 권한을 링크 대상과 비교하여 불일치를 찾아야 합니다.
한 가지 옵션은 -a
사용자, 그룹 및 권한 보존이 포함된 콘텐츠를 -rlt
.
또는 추가 옵션을 사용하여 파일 시스템을 마운트하거나 permissions
window-linux 사용자 매핑 파일을 사용하여 Posix 권한을 유지합니다.
답변4
모두의 도움에 감사드립니다. 외장 드라이브를 원본 드라이브와 동일한 XFS로 포맷하기로 했습니다. 효과가 있었어요! (를 통해) 첫 번째 및 후속 백업의 크기를 확인할 수 있습니다 du -h -d1
.
117G ./Apps-2020-05-04T14-19-42
3.5G ./Apps-2020-05-04T15-07-12
121G .