정기적으로 백업되는 디스크가 있습니다. 디스크는 여러 개의 서로 다른 파티션으로 구성됩니다. 저는 항상 dd 명령을 사용하여 /dev/sdX를 한 번에 백업했는데 모든 것이 순조롭게 진행되었습니다. 때로는 이러한 백업을 사용하여 디스크를 다른 디스크에 복제하기도 합니다.
그러나 파티션 중 하나는 매우 크고 거의 변경되지 않는 것으로 나타났습니다. 단일 파티션만 백업하여 백업 크기를 줄일 수 있다면 더 좋을 것입니다.
물론 dd는 /dev/sdX1, /dev/sdX2 등만 백업할 수 있습니다. 하지만 저는 여전히 이러한 백업을 베어메탈에서 새 디스크로 복제할 수 있기를 원합니다. 현재 전체 디스크를 백업하면 이 작업을 제대로 수행할 수 있지만 파티션만 백업하면 상황이 달라집니다.
어떻게 해야 하나요? 그래도 MBR과 같은 것을 저장해야 합니까?
답변1
Linux의 dd의 경우 데이터가 파일 간에 전송되는지 블록 장치 간에 전송되는지는 중요하지 않습니다.
백업을 생성할 때 다음과 같이 디스크 이미지에 저장한다고 가정합니다.
dd bs=128M if=/dev/sda of=backup.dd
참고: 이렇게 하면 디스크의 처음 512(MBR) 또는 16k(GPT) 바이트에 있는 MBR 및 GPT 데이터도 복사됩니다.
Linux의 좋은 점은 "가상" 루프 장치가 있는 블록 장치처럼 이미지 파일을 사용할 수 있다는 것입니다.
udisksctl loop-setup --file backup.dd
이제 외부 백업과 마찬가지로 백업이 파일 관리자에 나타납니다. 일반적 으로 숫자 /dev/loopX
로 지칭됩니다 X
. 순환 장비에도 칸막이 /dev/loopXp1
등이 있습니다.
이제 백업의 개별 파티션을 업데이트할 수 있습니다.
dd bs=128M if=/dev/sda1 of=/dev/loopXp1
업데이트 후 파일을 "제거"합니다.
udisksctl loop-delete --block-device /dev/loopX
하지만 기다려 보세요. 그 밖에도 특별한 파일 시스템 도구를 사용하면 모든 빈 공간을 건너뛰고 파티션의 사용된 부분만 복사하여 업데이트 속도를 높일 수 있습니다. 나는 이것을 추천할 수 있습니다(다른 사람들은 어떻게 생각하는지 모르겠습니다):
- 외부 2/3/4:
e2image -rap /dev/sda1 /dev/loopXp1
- NTFS:
ntfsclone --overwrite /dev/loopXp1 /dev/sda1
하지만 잠깐만요. 그 외에도 더 많은 것이 있습니다. 활용도에 따라 rsync를 사용하여 백업을 업데이트할 수도 있습니다. 이렇게 하려면 파일 시스템을 백업 파일에 마운트해야 합니다(루프가 설정된 후 루프가 제거되기 전).
udisksctl mount -b /dev/loopXp1
rsync -av wherever/dev/sda1/is/mounted/ wherever/dev/loopXp1/is/mounted/
udisksctl unmount -b /dev/loopXp1