rsync를 사용하여(rsnapshot, rdiff-backup 또는 다른 응용 프로그램은 사용하지 않음) 어떻게 생성할 수 있습니까?미분내 로컬 드라이브에 있는 디렉터리를 동일한 로컬 드라이브에 있는 다른 디렉터리로 백업합니까?
F. Hauri는 다음을 게시했습니다.에 대한 답변로컬 백업을 만드는 방법은 무엇입니까?:
#!/bin/bash
backRepo=/media/mydisk
backSrce=/home/user
backDest=home
backCopy=copy
backCount=9
[ -d "$backRepo/$backDest" ] || mkdir "$backRepo/$backDest"
cd $backSrce || exit 1
rsync -ax --delete --exclude '*~' --exclude '.DStore' . "$backRepo/$backDest/."
cd $backRepo
[ -d "$backCopy.$backCount" ] && rm -fR "$backCopy.$backCount"
for ((i=$backCount;i--;));do
[ -d "$backCopy.$i" ] && mv "$backCopy.$i" "$backCopy.$((i+1))"
done
((i++))
cp -al $backDest $backCopy.$i
위의 스크립트는 내가 원하는 것과 꽤 가까운 것 같지만, 솔직히 공부하는 데 한 시간 정도 걸렸음에도 불구하고Linux 및 Rsync를 사용한 간편한 자동 스냅샷 스타일 백업나는 아직도 rsync를 내가 원하는 대로 작동하게 만드는 방법에 대해 막연한 생각만 가지고 있습니다.
내 사용 사례는 다음과 같습니다.
내 컴퓨터에서 로컬로 비디오를 편집하고 있습니다. 해당 비디오와 관련된 수백 개의 파일을 모두 합한 크기는 5GB(5GB) 미만입니다.
현재 Grsync를 사용하여 내부 드라이브를 외부 USB 드라이브에 백업합니다. 실제로 rsync를 사용하여 동일한 작업을 수행하는 방법을 알아냈지만 Grsync를 시작한 다음 버튼 하나만 클릭하면 내 비디오 파일이 포함된 내부 디렉터리를 외부 USB 드라이브에 백업하기만 하면 되기 때문에 Grsync를 사용하는 것을 선호합니다. 전체 과정은 부드럽고 매끄 럽습니다.
몇 시간마다 위에서 언급한 내 동영상과 관련된 데이터를 내 Google 드라이브 계정에 백업하는 매우 원활한 방법을 원합니다. 폴더를 Google 드라이브에 업로드하도록 수동으로 선택해도 괜찮습니다. 실제로 백업이 실제로 수행되었는지 확인하는 데 도움이 되기 때문에 그렇게 하는 것을 선호합니다.
나는 며칠 밤마다 잠자리에 들기 전에 엄청난 양의 데이터가 포함된 비디오 파일이 포함된 폴더 전체를 내 Google 드라이브 계정에 복사해 왔습니다.
저는 Google 드라이브에서 데이터를 복원해야 하는 경우 혼동하지 않고 수동으로 복원할 수 있기 때문에 증분 백업보다 차등 백업을 선호합니다.
나는 수백 명의 사용자를 지원하는 대기업의 유닉스 시스템 관리자가 아니라는 점을 명심하십시오. 나는 컴퓨터 도난으로 인해 발생할 가능성이 큰 데이터 손실에 대비하여 몇 시간마다 데이터를 오프사이트에 백업하는 쉬운 방법을 원하는 한 사람일 뿐입니다. 그러나 완전히 자동화된 방법일 필요는 없습니다. . 나는 rsync가 내가 원하는 것을 할 수 있다고 거의 확신합니다. 그러므로 다른 응용 프로그램을 설치하는 것을 꺼려합니다.
답변1
여기요!
#!/bin/bash
# written by strobelight, you know who you are.
# license, MIT, go for it.
me=`basename $0`
EXCLUDES="\
--exclude '*~'
--exclude '.DS_Store'
"
CANDIDATES=/tmp/candidates
usage() {
cat <<EOF
$me last_diff_dir new_diff_dir [ dir_to_copy ]
where:
last_diff_dir is the directory containing the last differential
new_diff_dir is the directory you want files saved to
dir_to_copy is optional and is the directory to copy from (default .)
cd directory_to_backup
Full backup: $me full_back full_back
Diff backup: $me full_back diff_1
Diff backup: $me full_back diff_2
EOF
exit 1
}
get_dir() {
HERE=`pwd`
cd $1
x=`pwd`
cd $HERE
echo $x
}
if [ $# -lt 2 ]; then
usage
fi
LAST_DIR="$1"
NEW_DIR="$2"
DIR_TO_COPY="${3:-.}"
mkdir -p "$LAST_DIR" || exit 1
mkdir -p "$NEW_DIR" || exit 1
[ -d "$LAST_DIR" ] || usage
[ -d "$NEW_DIR" ] || usage
[ -d "$DIR_TO_COPY" ] || usage
LAST_DIR=`get_dir "$LAST_DIR"`
NEW_DIR=`get_dir "$NEW_DIR"`
DIR_TO_COPY=`get_dir "$DIR_TO_COPY"`
# get list of what's different
eval rsync -v --dry-run -axH --delete --update $EXCLUDES "$DIR_TO_COPY/" "$LAST_DIR" | awk '
/building file list/ { next }
/^$/ {next}
/bytes.*received/ { nextfile }
{
for(i=5;i<NF;i++) {
printf("%s ",$i)
}
printf("%s\n",$NF)
}
' | sed 's:/$::' > $CANDIDATES
#cat $CANDIDATES
# use list to backup
eval rsync --files-from=$CANDIDATES -lptgoDxH --delete $EXCLUDES ${DIR_TO_COPY}/ $NEW_DIR
예를 들어 현재 디렉터리에는 3개의 8k 파일이 있습니다.
$ ls -1sk
total 24
8 seg1
8 seg2
8 seg3
내 전체 백업이 아직 존재하지 않습니다. 해당 디렉터리를 full_bak로 지정하겠습니다.
ls ../full_bak
ls: ../full_bak: No such file or directory
먼저 차등을 수행할 전체 백업이 필요합니다. 스크립트를 $HOME/bin 디렉토리에 test123.sh로 복사했습니다. 두 인수가 모두 동일하면 기본적으로 전체 백업이 수행됩니다.
$HOME/bin/test123.sh ../full_bak ../full_bak
스크립트 출력
.
seg1
seg2
seg3
이제 ../full_bak를 보십시오.
$ ls -1sk ../full_bak
total 24
8 seg1
8 seg2
8 seg3
몇 가지 사항을 변경하세요.
dd if=/dev/zero of=seg2 bs=512 count=11
차이점이 있는지 확인하세요.
$ diff -q . ../full_bak
Files ./seg2 and ../full_bak/seg2 differ
이제 차등을 만듭니다.
$ $HOME/bin/test123.sh ../full_bak ../differential1
seg2
마지막 전체 백업과 다른 파일만 있는 차등 확인
$ ls -1sk ../differential1/
total 8
8 seg2
또 다른 변경
dd if=/dev/zero of=seg4 bs=512 count=10
무엇이 다른지 확인해보세요
diff -q . ../full_bak
Files ./seg2 and ../full_bak/seg2 differ
Only in .: seg4
전체 백업에 없는 새 파일과 이전에 변경된 파일이 있는 것을 확인하세요.
다른 디렉터리에 또 다른 차등을 수행합니다.
$ $HOME/bin/test123.sh ../full_bak ../differential2
.
seg2
seg4
새 차등에는 첫 번째 차등과 새 파일이 있습니다.
$ ls -1sk ../differential2
total 16
8 seg2
8 seg4
test123.sh를 사용하는 전체 백업 래퍼는 다음과 같습니다.
#!/bin/bash
FULLDIR=/media/mydisk/home
SRCDIR=/home/user
$HOME/bin/test123.sh $FULLDIR $FULLDIR $SRCDIR
다음은 시간을 기준으로 하위 디렉터리를 생성하는 차등 스크립트입니다.
#!/bin/bash
FULLDIR=/media/mydisk/fullbackup/home
DIFFDIR=/media/mydisk/differentials/home
SRCDIR=/home/user
DIFFSUB=`date '+BAK_%H'`
$HOME/bin/test123.sh $FULLDIR $DIFFDIR/$DIFFSUB $SRCDIR