Unix/Ubuntu

리눅스 다른 디스크/파티션으로 복제하기

ForceCore 2010. 2. 24. 05:11
우분투 9.10으로 테스트 해보았음을 알린다. Debian Lenny에서 업그레이드 한 Sid에서도 해봤다. Clonezilla Live로 파티션 to 파티션을 해봤는데 안 돼서 이 방법으로 진행했음도 알린다. 왜 동작 안 했는진 모르겠다. target 파티션을 포멧하지 않고 크기만 잡아놓아서 그런지도 모르겠다.

리눅스는 착해서 윈도우랑 달리 파일만 잘 복사해주고 boot loader만 잘 설정해주면 어디에 깔려있든 그다지 구애받지 않는다. 윈도우는 첫 디스크(=리눅스로 치면 /dev/sda)가 아니면 절대로 망함 ㅇㅇ;;

일단은 시스템의 사용을 막기 위해 gparted live같은 것으로 부팅을 한다. UNetbootIn을 사용하면 iso -> usb로 부팅 USB쯤은 쉽게 제작할 수 있다. gparted로 열심히 파티션을 짜고(필자는 윈도우에서 각 파티션의 크기만 잡아놓고, 포멧은 하지 않았다.) 거기서 콘솔을 열면 여러가지 작업을 할 수 있다.

# mount /dev/to/new /mnt  (사본이 들어갈 파티션을 마운트)
# mount /dev/to/old /src   (원본 파티션을 마운트)
# cd /mnt
# cp -av /src/* .
cp가 포인트다. a옵션이, 파일의 권한이나 소프트링크, 소유자 등 보존되어야 할 것을 적절히 보존해준다. 필수 옵션임. v는... 복사가 오래 되면 심심하니까, 뭐가 복사되고 있는지 보이라는 verbose 옵션이다. 기타 필요한 다른 파티션도 적절히 새 디스크에 복사한다. 홈파티션이라든가... 필자는 잡다하게 파티션을 나누지 않고 그냥 다 통짜로 모든걸 한 파티션에 둔다. 다만, home만은 다른 파티션으로 잡는다.

파일복사는 그다지 어렵지 않다(?응? 어디 복사 한두번 해보나). 그 뒤가 문제. grub을 설치해야 하는데... 흐음... Ubuntu 9.10이므로, grub 2 기준이다. grub 1은 또 다르니 그거는 각자 알아서 하라. (-_-....;;;)

원본 리눅스로 부팅을 다시 했다. (/dev/sda2에 사본의 /boot가 들었다고 가정한다.)

# grub-install /dev/sda
이렇게 디스크의 MBR에 grub을 설치해 줄 생각은 누구나 하지만 grub의 설정 파일을 생성해 주는 것이 문제가 된다. grub2의 설정파일은 손으로 수정하는게 아니고, grub-mkconfig를 수행시켜서 생성해야 한다. 손으로 들어가야 할 설정은 /etc/grub2.d였나? 설정이 모여 있는 디렉토리가 있으니 참고.

# mount /dev/sda2 /mnt
우선은 위와마운트를 해야겠죠.

그러나 grub-mkconfig 그것을 실행시키면... /mnt/boot 어쩌구 라고 우기면서 제대로 설정이 안 나온다. 그래서 chroot를 해야만 한다.

이제 chroot로 /dev/sda2가 일시적으로 /로 보이게 만들 것이다.
# mount -o bind /dev /mnt/dev
# mount -t proc /proc /mnt/proc
우선은 위와 같이 device와 proc을 해아만 device가 인식이 잘 되면서 grub-mkconfig가 제대로 먹힌다. 이걸 빼먹으면 chroot을 해도 되는게 없으니 주의!

# chroot /mnt
이렇게 하면 /mnt가  /로 보인다.

# grub-mkconfig -o /boot/grub/grub.cfg
이렇게 하면 설정이 잘 될 것이다. 안 되면 안 되는데 ㅠㅠ;;; 필자는 잘 되었다. 정리해서 써서 그렇지 grub부터 MBR에 얹고 cfg를 chroot도 안 하고 무작정 돌리고... 그랬었다). 그 이외에 안 된 것은 겪지 못했기 때문에, 기타 에러는 구글신에게 문의해보길...

# grub-install /dev/sda
이것을 시전해주면 grub은 설치 끝.

여기까지는 그래도 쉬운 편이다. -_-;;;;;;;;;;;;;;;;;;;;

사본의 /etc/fstab 을 적절히 수정해줘야 한다.
우분투의 경우는 UUID로 나타나기 때문에 그다지 어렵지 않은 편이다.
# blkid
blkid로 UUID를 체크할 수 있다.

부팅이 안 되면 또 /etc/fstab을 수정하고... 삽질을 조금 해야 할 것이다. /etc/fstab을 바로 잡기까지 좀 시행착오를 거쳐야 할 것이다. (ㅠㅠ 꼭 실수가 들어가더군).

윈도우를 먼저 설치하고 리눅스를 사본으로 복제했는데... 왜 윈도우가 grub엔 인식되고, 실행은 아니되는거지? 헑;;; ㅠㅠㅠㅠ;; 재설치 하면 괜찮으려나 ㅡ,.ㅡ;;; 그거는 to be continued.