백업을 위해 rsync를 사용합니다.
rsync -a --link-dest=PATHTO/$PREVIOUSBACKUP $SOURCE $CURRENTBACKUP
이렇게 하면 하드 링크를 사용하여 공간을 절약할 수 있습니다.
항상 변경되는 대용량 파일(가상 머신 이미지)을 백업해야 할 때 문제가 발생합니다.
전체 이미지를 하드링크하는 것이 아니고, 변경된 부분만 하드링크하는 것도 가능한가요? 이 문제를 해결할 수 있는 도구가 있습니까?
답변1
여기서 할 일이 많이 있습니다. 이들 중 어느 것도 실제로 하드 링크를 사용하지 않는다는 점에 유의하십시오. 왜냐하면 완전한 파일만 가리킬 수 있기 때문입니다. 파일 시스템을 사용하면 btrfs
여기서 매우 유용한 가능성이 열립니다. btrfs
현재로서는 아직 실험 단계라는 점에 유의하세요 (최신 버전은 v3.13입니다). 그러나 그젖소(기록 중 복사) 기능은 이러한 종류의 작업에 적합합니다(물론 동일한 파일 시스템에 대한 백업이 허용된다는 전제 하에). btrfs
에 마운트된 파일 시스템을 고려하면 /mnt
다음을 사용하여 전체 파일 시스템의 원자적 스냅샷을 생성할 수 있습니다.
btrfs subvolume snapshot /mnt /mnt/snapshot
부분 스냅샷을 허용하려면 백업하려는 파일을 subvolume
단일 디렉터리가 아닌 디렉터리에 배치해야 합니다. 예를 들어:
btrfs subvolume create /mnt/subvol
mv stuff /mnt/subvol
btrfs subvolume snapshot /mnt/subvol /mnt/subvol_snapshot
을 사용하는 것 외에도 btfrs
백업의 한쪽 또는 양쪽에 가상 머신 이미지를 마운트하고 rsync
두 마운트 지점 사이에서 사용하는 것을 고려할 수도 있습니다.
이 블로그.vdi
이를 이용하여 Virtual Box 이미지를 설치하는 방법을 보여줍니다 qemu-utils
. 루트로 명령(테스트되지 않음):
modprobe nbd
qemu-nbd -c /dev/nbd0 <vdi-file>
mount /dev/nbd0p1 /mnt
...
umount /mnt
qemu-nbd -d /dev/nbd0
마지막으로 유용할 수 있는 가장 간단한 방법은 --inplace
옵션 입니다 rsync
. 매뉴얼 페이지에서:
--inplace
This option changes how rsync transfers a file when its data needs to
be updated: instead of the default method of creating a new copy of the
file and moving it into place when it is complete, rsync instead writes
the updated data directly to the destination file.
...
This option is useful for transferring large files with block-based
changes or appended data, and also on systems that are disk bound, not
network bound.
--link-dest
rsync
물론 여기서 문제는 파일의 복사본을 대상에 생성해야 하기 때문에 이를 조합하여 사용해도 아무런 이점이 없다는 것입니다(버전 < 2.6.4에서는 두 가지가 완전히 호환되지 않습니다).