하드디스크 복사를 하려고 합니다

기존 500GB에 우분투 12.04를 사용 중입니다.
1TB의 하드디스크로 교체를 하려고 합는데 어려움이 있네요.
막연히 ACRONIS로 '디스크 복제’를 하면 되겠지 했는데 UUID가 발목을 잡습니다. :cry:

웹 검색을 하다보니 저와 같은 경우에 성공하신 분이 있어 따라해보려는데 어려움이 있어 도움 좀 부탁드립니다.

  1. [ /etc/default/grub ]에서 UUID를 교체할 1TB 값으로 수정하고 update-grub으로 grub.cfg를 새값으로 저장합니다.
  2. acronis의 디스크 복제로 새 1TB에 내용을 복제합니다.
  3. 기존의 하드디스크는 분리 후 부팅.
  4. 끝.

캬~ 저대로만 된다면 정말 깔끔하게 해결하는 건데…

[/etc/default/grub]에서 UUID 값을 어떻게 변경해야 되는지 모르겠습니다. :cry:

새 1TB의 UUID는 알겠는데 아래에서 어느 부분을 수정해야줘야 하는지 모르겠네요.

If you change this file, run ‘update-grub’ afterwards to update

/boot/grub/grub.cfg.

For full documentation of the options in this file, see:

info -f grub -n ‘Simple configuration’

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

Uncomment to enable BadRAM filtering, modify to suit your needs

This works with Linux (no patch required) and with any kernel that obtains

the memory map information from GRUB (GNU Mach, kernel of FreeBSD …)

#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

Uncomment to disable graphical terminal (grub-pc only)

#GRUB_TERMINAL=console

The resolution used on graphical terminal

note that you can use only modes which your graphic card supports via VBE

you can see them in real GRUB with the command `vbeinfo’

#GRUB_GFXMODE=640x480

Uncomment if you don’t want GRUB to pass "root=UUID=xxx" parameter to Linux

#GRUB_DISABLE_LINUX_UUID=true

Uncomment to disable generation of recovery mode menu entries

#GRUB_DISABLE_RECOVERY="true"

Uncomment to get a beep at grub start

#GRUB_INIT_TUNE="480 440 1"

정말 도움이 필요합니다. 구걸~ 구걸~ :cry:

GRUB2의 설정파일은 /boot/grub/grub.cfg의 파일입니다.
그러나 막상 열어보면,

DO NOT EDIT THIS FILE

It is automatically generated by grub-mkconfig using templates

from /etc/grub.d and settings from /etc/default/grub

이와 같이 시작하고, 이 파일은 편집하지 말라고 나오며,
grub-mkconfig에 의해 이 파일은 자동으로 생성되기고,
/etc/grub.d/*과 /etc/default/grub 파일이 사용됨을 알 수 있습니다.

sudo update-grub 명령으로 grub.cfg 파일이 변경됩니다.
위에서 쓰여진 대로 내부적으로 grub-mkconfig가 불려집니다.
grub-mkconfig는 /usr/share/grub/grub-mkconfig_lib를 source명령으로 실행하여,
필요한 함수들을 로드하고, /etc/default/grub을 source명령으로 실행하여,
정의된 변수들을 로드합니다.
또한 /etc/default/grub.d/*.cfg를 source 명령으로 실행합니다.
허나 실제적으로 이것은 존재하지 않고, 사용자가 변수나 함수를 따로 설정하기 위해 사용될 수 있을 것입니다.

그런 다음 /etc/grub.d/* 스크립트들 중에 실행권한이 있는
파일들에 한해 번호 순으로 실행하고, 그 결과로 출력되는 내용을 합쳐서 grub.cfg 파일을 만들게 됩니다.

/etc/grub.d/의 스크립들은 다음과 같습니다.
00_header 각종 변수들과 함수들의 정의 및 기본적인 설정
05_debian_theme 색깔 및 그림, 글꼴 등의 화면 꾸미기
10_linux 리눅스 커널 메뉴 생성
20_linux_xen 리눅스 xen (가상머신종류) 메뉴 생성
30_os-prober 리눅스 외의 운영체제 검출 및 메뉴 추가
30_uefi-firmware EFI 펌웨어 설정 메뉴
40_custom 사용자가 추가할 내용 (정적 포함-인클루드)
41_custom 사용자가 추가할 내용 (동적 포함-인클루드)

10_linux 등은 grub-probe를 사용하여, 부트파티션과 루트파티션을 찾아내고, 관련 UUID 및 Label, 파일시스템종류, 파티션 종류 등을 알아내며,
이것을 사용하여 리눅스 메뉴를 만듭니다.
30_os-prober는 os-prober를 사용하여, 다른 운영체제를 검출하고, 이것을 부트메뉴에 추가합니다.
40_custom은 자신의 내용을 3번째 줄 부터 그대로 출력하기 때문에, grub 명령이나 스크립트로 작성되어야 합니다.
하지만 평가의 시점은 grub_mkconfig가 실행되고 있는 동안 내용을 출력하여 grub.cfg에 합치는 것이므로,
수정 후에는 sudo update-grub 명령이 필요합니다.
41_cutom은 단순히 /boot/grub/custom.cfg를 읽어서 실행하라는 GRUB 명령입니다.
그렇기에 /boot/grub/custom.cfg의 내용이 어떻게 변경되는지는 상관하지 않습니다.
평가의 시점은 grub으로 부팅하는 도중, GRUB 부트로더에 의해 실행되는 것입니다.

자 그러면, UUID의 변경은 어떻게 처리하느냐의 문제로 들어가 봅시다.
만일, 리눅스의 루트파티션이나 부트파티션이라면, 10_linux에서 grub-probe를 사용하여 평가할 것이고,
윈도우즈 등의 파티션이라면, 30_os-prober에서 os-prober를 사용하여 평가할 것입니다.
두 경우, 모두 자동으로 생성한다는 것이고, 이것은 /etc/default/grub과는 거의 무관합니다.

만일, UUID를 수동으로 설정하고 싶으시다면,

당연히 먼저 생각해 봐야 할 것은

  1. 40_custom과 /boot/grub/custom.cfg 입니다.

먼저 기존 리눅스나, 라이브 CD나 USB등으로 부팅하시고,
새로운 디스크를 마운트하시고, grub부트 로더를 설치해 주셔야 부팅이 가능해집니다.
sudo grub-install /dev/sdb --boot-directory="부트파티션의 마운트위치나 디렉토리" 이렇게 해주시면 됩니다.
이후,/boot/grub/grub.cfg를 참조하여, /boot/grub/custom.cfg에 변경될 부트메뉴를 추가해 주시면 됩니다.
sudo blkid 명령으로 파티션의 UUID, 파일시스템종류, 장치명, Label등을 알아내시고,
/etc/fstab 파일도 그에 맞게 수정해 주셔야 합니다.

  1. 자동 메커니즘을 최대한 사용하는 방법도 있습니다.

chroot 환경에서 update-grub 을 해주는 것입니다.
먼저 기존 리눅스나 라이브 CD나 USB로 부팅하신 후,
mkdir t

#/dev/sdb1이 부트파티션, /dev/sdb2가 루트파티션인 경우
sudo mount /dev/sdb2 r
sudo mount /dev/sdb1 r/boot
sudo grub-install /dev/sdb --boot-directory=r/boot

sudo blkid 명령으로 파티션의 UUID, 파일시스템종류, 장치명, Label등을 알아내시고,
sudo vi r/etc/fstab 또는 sudo gedit r/etc/fstab 으로 fstab 변경
sudo mount -o bind /dev/proc r/proc
sudo mount -o bind /dev/sys r/sys
sudo mount -o bind /dev r/dev
sudo mount -o bind /dev/pts r/dev/pts
sudo chroot r /bin/bash
update-grub
exit
sudo umount r/dev/pts r/{dev,sys,proc}

아래의 경우는 chroot로 update-grub을 사용하기에, device.map 파일 등도,
그 시스템에 맞게 적용됩니다.

  1. grub.cfg를 변경하지 않는 방법도 있습니다.

먼저 기존 리눅스나 라이브 CD나 USB로 부팅하신 후,
mkdir r
sudo mount /dev/sdb2 r
sudo mount /dev/sdb1 r/boot
이렇게 마운트 하신 후, 부트로더 설치를 아래와 같이 하시고,
sudo grub-install /dev/sdb --boot-directory=r/boot
sudo gedit r/etc/fstab으로 fstab을 변경하시고,
sudo e2label /dev/sdb1 LINUX_BOOT
sudo e2label /dev/sdb2 LINUX_ROOT
이런식으로 Label를 설정하신 후,
sudo umount r/boot r
새로운 디스크로 부팅
SHIFT키를 계속 누르시다 보면, 메뉴가 뜹니다. (이게 안뜬다면, /boot/grub/grub.cfg나 /boot/grub/custom.cfg 등에서, set timeout=-1로 강제 설정하셔서, 메뉴를 보이게 하세요)
원하시는 메뉴 위로 커서를 옮기신 후, e키를 눌러 편집모드로 가신 후,
search로 시작하는 부분의 --fs-uuid 대신 --fs-label로 변경, 뒷 부분의 UUID문자열 대신 이름을 적어주세요
그리고, linux로 시작하는 줄의 root=UUID=문자열 대신 root=LABEL=이름 으로 바꿔주시고,
F10이나 Ctrl+x 키로 부팅을 하세요.
부팅하신 후, sudo update-grub 명령으로 grub메뉴를 갱신하시면 됩니다.

  1. 다른 도구를 사용한 마이그레이션을 생각해 볼 수 있습니다.
    dd 명령으로 그대로 떠서, MBR의 GRUB부트로더 까지 복사하는 방법이 있는데, 그렇게 하더라도, grub.cfg 파일과 /etc/fstab파일은 변경을 요합니다.
    다른 방법으로 clonezilla라는 강력한 도구를 사용하여 백업/복원하는 방법이 있습니다.

그 외에 생각해 볼 것은 /etc/fstab에서의 UUID의 사용입니다.
UUID는 파일시스템의 변경시 (크기 변경, 이동 등) 변화됩니다. 그러나, 한번 적용되면, 다른 디스크와는 확실하게 구별됩니다.
예) UUID=909673cc-1c9b-4554-91d8-a18f267e6a95 / ext4 errors=remount-ro,noatime,nodiratime 0 1
/dev/장치명 의 형태로 사용시 이것은, udev에 의해 자동으로 장치가 /dev에 생성되기에, 부팅순서등에 영향을 받습니다.
예) /dev/sda1 / ext4 errors=remount-ro,noatime,nodiratime 0 1
Label의 형태로 사용시 파티션을 변경하더라도, 동일 이름을 사용하는 경우, 설정을 바꿔주지 않아도 됩니다.
그러나, 동일 이름이 사용되는 파티션의 경우 문제 발생의 소지가 있습니다.
예) /dev/disk/by-label/LINUX_ROOT / ext4 errors=remount-ro,noatime,nodiratime 0 1
그렇지만 이것이 가장 인간적인 이름이기 때문에, UUID를 사용하더라도, Label를 구별하여 정의해 두는 것이 좋습니다.
이유는, GRUB 부트메뉴에서 편집모드로 들어가셔서, linux로 시작하는 커널파라미터 부분에,
root=UUID=xxxxxxxxxxxxxx 이런 식으로 적기보다는
root=LABEL=이름 이런식으로 적는 것이 기억하기 쉽기에, 편집하기 용이합니다.

엄청나게 상세한 설명 대단히 고맙습니다. :D
내일 시간 나는 데로 해보도록 하겠습니다.