GRUB2 Migration
배경
GRUB 이란 무엇일까요?
GRUB은 비 임베디드 리눅스 장치에서 대부분 존재하는 부트로더중 하나입니다. GRUB의 역할은 디스크에서 메모리로 리눅스 커널을 불러오도록 갖추고 리눅스 커널을 실행하는 것입니다.
왜 옮겨야 하나요?
먼저, 이전 GRUB은 더이상 업데이트를 받지 않으므로 관리하지 않습니다. 이전 GRUB은 개발자들이 오늘날 더이상 제대로 된 상태로 유지할 수 없다는 다양한 고려 사항이 발생함에도 불구, 안전하다는 느낌에 빠질 때마다 계속 만들었습니다. 예를 들어 이전 GRUB은 2TB 이상의 디스크로는 부팅할 수 없으며 새 파일 시스템으로는 /boot를 대체할 수 없다고 간주합니다.
GRUB2는 좀 더 견고하고, 가벼우며, 강력함을 목표로 하였으며, 더욱 깔끔한 코드를 기반으로 유지 관리합니다. GRUB2는 이전 버전과는 달리 더 많은 하드웨어 설정, 파일 시스템, 드라이브 배치를 지원합니다.
GRUB2로 옮겨가기
GRUB2로 옮겨가는 것은 꽤 간단합니다. 꾸러미 관리자가 보통 업그레이드 과정을 처리하는걸로 같이 끝냅니다. 자동으로 끌어오지 않았다면 sys-boot/grub:2
꾸러미 요소로 언제든 설치할 수 있습니다.
root #
emerge --ask sys-boot/grub:2
부트 드라이브
첫번째 중요한 부분은 어떤 드라이브가 부팅이 가능한지에 대한 이해입니다. 젠투 핸드북을 쭉 따라온 분이라면 /dev/sda입니다. 잘 모르겠다면, 기존의 GRUB 설정을 살펴보는게 가장 쉬운 방법입니다. 주로 살펴볼 부분은/boot/grub/grub.conf 파일입니다.
이 파일을 살펴볼 때 /boot 분할 영역을 마운트했는지 확인하십시오. 확인 방법은 다음과 같이 간단합니다
root #
mount /boot
grub.conf의 내용은 다음과 같습니다:
default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title Gentoo Linux 3.2.12
root (hd0,0)
kernel /boot/kernel-3.2.12-gentoo root=/dev/sda3 quiet dolvm
initrd /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
위 파일 내용을 근거로 (hd0)
가 부트 드라이브임을 알아낼 수 있지만 이걸 실제 장치로 대응해야 합니다. 이를 알려면 /boot/grub/device.map 살펴보십시오. 예제는 아래에 있습니다.
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
/boot/grub/device.map이 정확하지 않은 것 같다면, 다음 명령으로 파일을 다시 만드십시오:
root #
grub-install --recheck /dev/sda
위 파일을 기반으로 /dev/sda가 부팅 드라이브임을 알고 있습니다.
GRUB2 설치 및 설정
다음 단계에서는 예전의 GRUB을 드라이브의 주 부트 레코드(MBR)에서 제거하지 않고 /boot 파티션에 GRUB2를 설치하고 설정합니다. 아래 예제는 /dev/sda를 사용하지만 여러분에게 맞는 드라이브 경로로 바꿔야 합니다.
우선 /boot/grub로 필요한 GRUB2 파일을 설치합니다.
root #
grub-install --grub-setup=/bin/true /dev/sda
Installation finished. No error reported.
--grub-setup=/bin/true
옵션은 grub-install 명령에 GRUB2를 MBR에 설치하지 않겠다고 알립니다. 이 옵션을 빼면 GRUB 이전 버전을 그대로 덮어 쓰고 나중에 GRUB 이전 버전에서 GRUB2를 불러오는 동작을 수행할 수 없습니다.이제 시스템에 있는 커널을 검색하고 /boot/grub/grub.cfg로 적당한 설정 파일을 만들겠습니다. 직접 설정 방식대로 진행한다면 이 단계는 건너뛰십시오.
root #
grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ... Found linux image: /boot/kernel-3.2.12-gentoo Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo done
예전 GRUB은 /boot/grub/grub.conf를 사용하는데 반해 GRUB2는 /boot/grub/grub.cfg를 사용하므로 예전 파일을 사용하는 우를 범하지 마십시오. 예를 들자면 탭 완성 기능을 활용하여 예전 파일이 아직 있는지 확인할 수 있습니다.
grub-mkconfig는 커널과 initramfs 이미지에 대한 엄격한 작명 요구사항이 있습니다. 커널은 반드시
kernel-${version}
또는 vmlinuz-${version}
이어야 하고 initramfs는 initramfs-${version}.img
, initramfs-genkernel-${version}
, initramfs-genkernel-${arch}-${version}
, initrd-${version}.img
, initrd.img-${version}
, initrd-${version}.gz
, initrd-${version}
중 하나가 되어야 합니다. 이들 파일은 /boot에 있어야 합니다./etc/default/grub 파일은 grub-mkconfig 동작을 다룹니다. 커널에 매개 변수를 전달해야 한다면(예를 들어 genkernel을 사용하고 LVM이나 소프트웨어 RAID로 부팅한다면) /boot/grub/grub.cfg 파일을 만들기 전에 위 파일을 다음과 같이 편집하십시오:
root #
nano /etc/default/grub
GRUB_CMDLINE_LINUX
변수 값을 바꿔야합니다.root #
nano /etc/default/grub
Have a look at GRUB configuration on the Gentoo Wiki or the official GRUB2 manual to decide how to modify the file. Most users will need to change GRUB_CMDLINE_LINUX
to specify parameters to be passed on the kernel command line.}}
설정을 시험하기 위해 이전 GRUB에서 GRUB2 이어서 불러오기
깨진 GRUB 설정은 시스템 부팅을 불가능하게 한다는 의미를 지닐 수 있으므로, GRUB2 설정을 완전히 두기 전에 시험하려 합니다. 이를 위해 예전 GRUB에서 GRUB2로 그대로 이어서 불러오도록 하겠습니다. /boot/grub/grub.conf에 새 섹현을 추가하면 됩니다. 예제는 다음과 같습니다.
예제에서 사용한 바와 같이
(hd0,0)
과 실제 루트 분할 영역이 다를 수 있음을 알아두시고, /boot/grub/grub.conf 설정 파일에서 같은 루트 값을 다시 사용하는지 확인하십시오.default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title GRUB2 Chainload
root (hd0,0)
kernel /boot/grub/i386-pc/core.img
boot
title Gentoo Linux 3.2.12
root (hd0,0)
kernel /boot/kernel-3.2.12-gentoo root=/dev/sda3 quiet dolvm
initrd /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
여기서 머신을 재부팅해야하고, 머신이 부팅할 때 GRUB 메뉴에서 GRUB2 Chainload
를 선택해야 합니다. GRUB 2.0.0 이상과 같이 자체적으로 알려주는 다른 GRUB 메뉴가 상단에 함께 나타나고, 시스템에 있는 부팅 커널을 보여줍니다. 이게 동작하지 않으며 그냥 시스템을 껐다 켜고, GRUB2 Chainload
대신 일반 부트 옵션을 고르십시오.
이전 GRUB 대체하고 제거
모든 과정이 성공적으로 끝나면, 예전 GRUB을 바꾸고 시스템에서 제거할 수 있습니다.
시스템을 다시 부팅했으므로 /boot 분할 영역을 다시 마운트해야합니다. 단지 예제에서 보여준 것 처럼 /dev/sda 대신 올바른 부팅 드라이브를 사용하는지 확인하십시오. grub-install을 실행하기 전 /boot를 마운트하지 않으면, 시스템을 부팅할 수 없게 만듭니다.
앞서 언급한 바와 같이 GRUB2를 이머지할 때
multislot
USE 플래그를 사용했다면 grub-install 대신 grub2-install을 사용해야 합니다. 이 경우, 다음 과정에서 이전 GRUB 버전을 시스템에서 제거하고 나면, multislot
USE 플래그를 빼고 GRUB2를 다시 이머지해야 grub-install 과 grub-mkconfig 명령을 GRUB2 명령으로 사용할 수 있습니다.root #
grub-install /dev/sda
Installation finished. No error reported.
여기서 꾸러미 관리자를 사용하여 sys-boot/grub:0
을 제거할 수 있습니다.
root #
emerge -avC "=sys-boot/grub-0.97*"
이제 옮기는 과정이 끝났습니다.
GRUB2 유지 관리
새 커널을 설치하는 언제든지, 다음 단계를 진행하여 GRUB2 설정이 (직접 설정 방식을 따라가지 않는다면)새 커널을 인식하도록 해야 합니다.
이 단계에서 /boot 분할 영역을 마운트했는지 확인하십시오.
root #
grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ... Found linux image: /boot/kernel-3.3.8-gentoo Found initrd image: /boot/initramfs-genkernel-x86_64-3.3.8-gentoo Found linux image: /boot/kernel-3.2.12-gentoo Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo done
This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Cardoe
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.