보통 시스템에 새로운 디스크를 추가하고, 시스템의 루트가 아닌 곳에 위치, 예를 들어 /var/에 마운트하고 싶으면,
- 새로운 디스크를 물리적으로 연결합니다.
- 디스크가 인식되는지 확인합니다.
- 해당 디스크의 파티션을 나눕니다.
- 해당 디바이스에 파일 시스템, 예를 들어 ext4를 만듭니다.
- 해당 디바이스를 기존 시스템의 위치, 예를 들어 /mnt/var에 마운트합니다.
- 기존 /var 아래의 모든 자료를 /mnt/var로 복사합니다.
- 해당 디바이스를 언마운트합니다.
- 해당 디바이스를 /var로 마운트합니다.
- /etc/fstab에 해당 디바이스의 마운트 정보를 기입합니다.
한편, 새로운 디스크를 루트 파티션으로 사용하는 것은 거의 같은 방법을 이용하지만, 추가적으로 부팅되어야 하므로,
- /etc/fstab을 수정해야 합니다.
- 부트로더를 설치해야 합니다.
이것을 도와주는 프로그램으로는 partclone, clonezilla, partimage, dd, 또는 유사한 프로그램과 이 과정을 자동으로 만들어 둔 스크립트가 있습니다.
어쨌든, 이 과정은 다음 2가지를 가정합니다.
- 부트로더는 GRUB 2를 사용합니다.
- 두 개의 디스크가 있고, 이전 디스크보다 새로운 디스크가 같거나 더 커야 합니다.
Using dd
다른 방법에 비해, 가장 쉽고 가장 빠른 dd를 이용하는 것입니다.
먼저, 물리적으로 연결된 디스크를 확인합니다.
- sudo fdisk -l
이전 디스크가 있는 위치가 /dev/nvme0n1이고, 새로운 디스크의 위치가 /dev/nvme1n1이면 아래와 같이 복사할 수 있습니다. 이 과정은 디스크의 모든 내용을 덮어쓰기 때문에, 정확한 명령을 내려야 합니다!!
- dd if=/dev/nvme0n1 of=/dev/nvme1n1 bs=64K conv=noerror,sync
원래 디스크는 EFI 파티션(/dev/nvme0n1p1)과 루트 파티션(/dev/nvme0n1p2)으로 이루어져 있습니다.
하나의 파티션(루트)만 옮기고 싶을 때에는
- dd if=/dev/nvme0n1p2 of=/dev/nvme1n1p2 bs=64K conv=noerror,sync
이 경우에는 새로운 디스크가 미리 파티션이 나누어져 있어야 합니다.
위의 복사 과정이 끝나면, 마운트를 해서 확인할 필요가 있습니다.
- sudo mkdir /mnt/new
- sudo mount /dev/nvme1n1p1 /mnt/new
- umount /mnt/new
- sudo mount /dev/nvme1n1p2 /mnt/new
- umount /mnt/new
Problems and a Solution
복사 과정을 거친 후에, 구성을 바꾸면 잘 될 것처럼 보이지만, 몇 가지 문제가 발생합니다.
- UUID가 공유되어 EFI 파티션의 UUID를 바꾸는 것이 쉽지 않습니다.
- 부트로더를 설치해도, 새로운 위치로 부팅이 되지 않습니다.
- df를 실행했을 때, 새로운 디스크가 충분히 더 큼에도 불구하고, 이전 디스크의 크기로만 잡힙니다.
UUID와 관련된 문제는 fstab에서 디바이스 이름으로 마운트를 함으로써 일부 해결이 될 수 있으며, 부트로더는 grub-customer를 이용해서 해결할 수 있습니다. 그리고, 기존의 디스크는 나중에 하나로 합쳐서 새로운 파일 시스템을 만듦으로써 문제를 완전히 없앨 수 있습니다.
어쨌든, UUID를 완전히 새롭게 만드는 방법은 간단하게도 이전 설치 USB로부터 우분투를 새롭게 설치하는 것입니다. 이때, 기존의 파티션은 지워져서는 안되므로, 거의 아래쪽에 "Erase and New install"을 선택할 수 있습니다. 위쪽에 있는 기존에 설치되어 있는 우분투를 지우는 항목은 절대 선택해서는 안됩니다.
이렇게 하면, EFI 파티션과 루트 파티션이 새롭게 만들어지면서, 새로운 UUID를 만듭니다.
그리고 부트로더는 새로운 디스크에 이전 그럽 정보를 합쳐서 메뉴를 만들어 줍니다. 물론 이전 디스크에 그럽 정보가 남아 있긴 하지만, 메뉴는 사라지기 때문에, 그럽 명령 줄에서 직접 커널을 지정해서 이전 시스템으로 부팅할 수 있습니다.
이제 루트 파티션만 복사해 옵니다.
- dd if=/dev/nvme0n1p2 of=/dev/nvme1n1p2 bs=64K conv=noerror,sync
물론 이 경우에도 UUID를 그대로 공유하기 때문에, UUID를 바꾸어 주어야 합니다.
먼저, UUID를 확인합니다.
- sudo blkid
새로운 UUID를 하나 만듭니다.
- uuidgen
b4ad3afa-98ee-486d-b7a7-2cc0a341515b
만들어진 파티션에 UUID를 적용합니다.
- sudo tune2fs /dev/nvme1n1p2 -U b4ad3afa-98ee-486d-b7a7-2cc0a341515b
이제 새로운 루트 파티션을 마운트해서 fstab을 수정합니다.
- sudo mount /dev/nvme1n1p2 /mnt/new
- sudo vim /etc/fstab
이제 부트로더를 설치합니다.
sudo grub-install /dev/nvme1n1
만약 부트로더 메뉴를 좀 더 편리하게 만들고 싶으면 grub-customer를 이용하는 것이 좋습니다.
이제 새로운 시스템으로 부팅해서 다음을 확인합니다.
- df
아마도 새로운 디스크의 정보가 아니라, 이전 디스크의 정보가 출력될 것입니다. 이 부분에 대한 수정은 GParted#Resize를 참조하십시오.