다음 스크립트는 증분 백업을 수행하지 못하고 대신 전체 백업을 생성합니다.
다른 FreeBSD 서버에서는 정확히 동일한 스크립트가 정상적으로 작동합니다(증분 백업 생성).
두 시스템의 서버는 동일하며 동일한 FreeBSD 10.0-RELEASE입니다. 똑같은 스크립트를 작성하세요. gtar 버전도 동일합니다. 파일 시스템은 동일합니다.
무슨 일이 일어났는지 모르겠어요. 며칠 동안 찾고 있었어요! 도와주세요.
#!/bin/sh
sourcedir="/home"
targetdir="/backup/home"
now=$(date +"%Y%m%d%H%M")
cd $sourcedir
for dir in */
do
base=$(basename "$dir")
gtar -cz -g "$targetdir/.gtar-incremental" -f "$targetdir/${base}-$now.tar.gz" "/home/$dir"
chmod 600 "$targetdir/${base}-$now.tar.gz"
done
답변1
오늘 이 문제를 조사하면서 여기에는 두 가지 문제가 있다고 생각합니다.
- 루프가 반복될 때마다
for
새 델타 파일이 생성됩니다(또는 이전 파일을 덮어씁니다 :-). 보관 파일과 스냅샷 파일 사이에는 1:1 매핑이 있으므로gtar-incremental
모든 보관 파일을 제공할 수는 없다는 점에 유의하세요. gtar
타임 스탬프를 좋아하지 않습니다. 이는 스냅샷 파일에tar.gz
파일 이름이 저장되기 때문이며, 전달된 문자열이$now
이전 문자열과 다를 경우 새 zip 파일과 새 스냅샷 파일이 생성되기 때문입니다.
내가 그것을 확인하고 증분이 작동하는 방식은 다음 줄을 변경하는 것입니다 gtar
.
gtar --listed-incremental=$targetdir/gtar-incremental-$base -cvzf $targetdir/$base.tar.gz $dir
이는 점진적으로 작동합니다.
위의 명령은 incremental
백업되는 각 디렉터리에 대한 파일을 생성합니다.
incremental
여러 파일 없이 작동 하도록 하는 또 다른 방법은 home
개별 아카이브 대신 전체 디렉토리를 전체적으로 백업하는 것입니다(즉, 루프 없이 에 for
직접 백업 )./home
/backup/home.tar.gz
gtar
마지막으로 타임스탬프가 중요하다면 파일이 완료된 후 타임스탬프를 추가하거나 파일에서 타임스탬프를 제거 할 수 있다고 생각했습니다 (n > 2 실행 전에 존재하는 경우 if
명령문을 사용하여 구성할 수 있습니다).
타임스탬프가 귀하의 작업에 중요합니까?
도움이 되었기를 바랍니다.