Disk Imaging/디스크 복사/디스크 백업/Disk Clone.. 표현은 다르지만, 뜻하는 바는 모두 같다. 디스크 전체(파티션도 가능)를 파일로 저장함. 또는 디스크를 섹터별로 다른 디스크로 복제.
따라서 데이터뿐만 아니라 실행파일까지. 단지 실행파일 뿐만이 아니라, 그 파일들이 저장되어 있는 방식까지. 그야말로 그대로 복제함을 의미한다.
예전에 쓴 글도 거의 같은 내용이지만, 아래 글은 ‘압축’을 사용한다는 점이 조금 다르다. 이런 것들을 가능하게 해주는 것들로, 유명한 것은 Symantec Ghost(Symantec 이라니까 어색하네. 원랜 Norton 이었지..), 그리고 오픈소스로는 Clonezilla 가 있다. 그런데, 이런 것들 필요없이 우분투 라이브 디스크만 있으면 간단하게 이미지를 만들 수 있다. 다음 글들을 참고했다.
사용법은 굉장히 간단하다. 먼저 원본 디스크 디렉토리를 확인한다. 우분투 라이브에는 gparted 가 포함되어 있으므로, 그것을 실행해서 확인하면 된다.
디스크 전체를 저장하려고 하므로, /dev/sda 등이 되고, /dev/sda1 (파티션) 등은 안된다.
원본 저장 :
$ sudo dd if=/dev/sdX | bzip2 > /media/usb/image.bz2
또는,
$ sudo dd if=/dev/sdX | gzip -c > /tmp/vdadisk.img.gz
또는, dd 시에 이런 옵션을 붙이면 조금 더 빨라질 수도 있겠다.
status=progress 는 반드시 붙여줘야 진행 상황을 알 수 있다. 시간이 꽤 걸리는 작업이므로, 이게 없다면 죽었는지(살았는지?) 알 길이 막막해진다.
$ sudo dd if=/dev/sdX bs=64K conv=noerror,sync status=progress | gzip -c > /tmp/vdadisk.img.gz
복원 :
$ bzcat /media/usb/image.bz2 | sudo dd of=/dev/sdX
또는,
$ gzip -dc /tmp/vdadisk.img.gz | sudo dd of=/dev/sdX
sdX 는 적절하게 바꿔줘야 한다. sda, sdb 등등.
sudo 는 dd 에만 주면 된다. 다시 말해서, /dev/sdX 에 접근할 때만 관리자 권한이 필요하다.
우분투가 설치된 디스크, 해킨토시가 설치된 디스크, 여러 OS 가 섞인 디스크로 시험해봤는데, 원본 저장, 원본 복원 모두 잘 작동했다.
다만, 새로 저장할 디스크는 원본과 같은 크기거나 더 큰 용량을 가져야만 한다. (당연한 소리겠지만.)
사용법도 간단하니 어려울 것도 없고. (우분투 디스크는 128GB 였는데, 용량을 많이 차지하는 디렉토리들을 대부분 HDD 로 Bind 해놨더니, 백업 파일 크기가 9GB 정도 밖에 안됐다. 이 정도면 정말 USB 드라이브에도 들어갈 정도. 해킨토시 디스크는 64GB 였는데, 이건 35GB 정도가 나왔다. OSX 도 Bind 등이 가능하겠지만.. 내가 거의 쓰질 않으니 뭐..)
한가지, 이렇게 통째로 저장을 할 때, dd 에서 bs 값을 어떻게 주는 편이 좋은 지는 잘 모르겠다.
** UUID??
이미지 클론을 하면 UUID 도 동일하게 복사되는데..? 아래 글은 왜 써놨었는지 잘 모르겠군.
다만, 위 링크에도 있지만, 이미지를 복원할 때, 이미지를 떴던 드라이브가 아닌 다른 드라이브로 복원할 경우, fstab 에 있는 UUID 가 달라질 수도 있기 때문에 부팅이 안될 수도 있다. 링크에 있는 내용을 참고해서 수정해줘야 한다. 이 점을 명심할 것!
참고 : dd 기본 사용법
sudo dd if=<input file> of=/dev/sdX bs=1M status=progress
따라서, Drive A 를 Drive B 로 동일하게 복사(섹터 별로)하려면 다음 명령이면 충분하다.
# sda 는 Source, sdb 는 Destination 이라는 가정 하에. sudo dd if=/dev/sda of=/dev/sdb bs=1024k status=progress
그대로 복사하기 때문에, 원본과 복사본 uuid 도 당연히 동일하다.
nixCraft 에 있는 글을 참고하면 더 복잡한(?) 사용 예를 볼 수 있다.