2014/08/31

Ubuntu BIOS 및 UEFI Grub 복구


(2015/11/21 최종 수정)

최근에 OS X El Capitan이나 Windows 10 (Build 10586.11)으로 Upgrade를 해 보니 OS 별로 Upgrade 할 때마다 자체 복구 파티션을 OS 파티션 끝에 추가하면서 파티션 수가 자동으로 늘어나는 일이 자주 생긴다. 이러면 우분투 파티션 번호가 밀려 버려서 Grub으로 부팅이 안되고 grub rescue> 모드로 진입해 버린다. 물론, 복구 파티션이 추가되는 경우는 OS 파티션을 매우 넉넉하게 잡았을 경우에만 발생하므로 모든 사용자가 경험하게 되는 일은 아니다.

아무튼 grub rescue> 모드로 진입시에 Grub을 복구하는 방법을 추가한다. 우분투 설치 USB를 사용할 필요가 없으니 아래의 방법들을 사용하기 전에 먼저 사용해 볼만한 방법이다.

Grub rescue> 모드를 이용한 Grub 복구 방법

아래와 같이 grub rescue 모드에서 우분투의 boot 파티션을 알아 낼 수 있다.

grub rescue> ls
(hd0) (hd1) (hd1,gpt1) (hd1,gpt2) ......

grub rescue> ls (hd1,gpt10)/
/boot ......

위와 같이 /boot 폴더가 보이는 파티션이 리눅스 boot 파티션이다. 이제 아래와 같이 하면 Grub으로 부팅할 수 있다.

grub rescue> set prefix=(hd1,gpt10)/boot/grub
grub rescue> insmod normal
grub rescue> normal

이제 우분투 Grub으로 정상 부팅하게 된다. 우분투로 부팅 후, 첫번째 하드디스크에 우분투가 설치되어 있다는 가정하에 아래 두개의 명령으로 Grub이 복구된다.

$ sudo grub-install /dev/sda
$ sudo update-grub

위의 첫번째 명령은 UEFI 방식이든 BIOS 방식이든 Grub이 사용자들에게 일관된 명령을 사용하도록 유도하려는 목적인 듯하다. 실제로는 UEFI와 BIOS 모드의 grub은 서로 다른 패키지이고, 세부 명령 파라메터도 아래의 UEFI 모드에서의 grub-install 명령이 매우 복잡한 것에서 알 수 있듯이 명령 자체가 다르게 수행된다.

grub rescue> 모드로 진입하든 못하든, 일반적으로 우분투 Grub을 복구하는 방법은 여전히 아래의 글을 참고하면 된다.


(2015/8/1 수정)

우분투에서 Grub2 복구 방법에 대한 글들은 많지만 최근의 UEFI 환경을 반영하지 못해 사용자 들이 혼란을 겪는 경우가 많다. 우분투에서는 booting 문제에 대한 모든 것을 boot-repair로 해결하도록 유도하는 듯 하나 이것이 만병통치약은 아니다. boot-repair의 작업 내용은 다소 불투명하고 사용자가 옵션을 어떻게 주느냐에 따라서도 결과가 달라지기 때문이다.

이 글에서는 BIOS 모드와 UEFI 모드로 우분투가 설치된 경우에 대해 OS가 어떤 방식으로 설치됐는지 확인하고 각각의 경우 Grub을 어떻게 복구하는지 알아 본다. 기본적으로, 우분투로 부팅할 수 있어야 하므로 Ubuntu UEFI 모드 설치 USB 만들기 방법으로 만든 USB를 사용한다. 이 USB는 UEFI와 BIOS 방식으로 부팅해서 우분투 live 기능을 사용할 수 있기 때문이다.

참고로, 최근의 Windows 8+이 설치된 PC 들은 UEFI 모드로 OS가 설치됐을 가능성이 높고, 그 전의 PC들은 BIOS 모드로 OS가 설치됐을 가능성이 높다. Multi-OS 환경에서는 두 가지 방식을 혼용해서 사용하기가 어렵다. 즉, Windows가 UEFI 모드로 설치됐으면 우분투도 UEFI 모드로 설치된 것이라고 봐도 좋다. 하지만, 사용자 PC 설정에 따라서 Windows 8+도 BIOS 모드로 설치될 수 있다는 점을 간과해선 안된다.

Ubuntu에서 UEFI vs. BIOS 모드 확인 방법

사용자가 확실히 우분투를 어떤 방식으로 설치했는지 알고 있다면 이 과정은 건너 뛰어도 된다.

우분투 설치 USB로 부팅해서 우분투가 설치된 /boot 파티션을 아래와 같이 마운트 한다. 우분투 설치시 /boot 파티션을 따로 지정하지 않으면 우분투가 설치된 파티션(= root partition)에 /boot 폴더가 있다. 우분투가 설치된 파티션을 잘 모르면 아래의 명령으로 확인할 수 있다.

$ sudo parted /dev/sda print

여기서는 3번 파티션, 즉, /dev/sda3에 우분투가 설치됐다고 가정한다.

$ sudo mkdir /mnt
$ sudo mount /dev/sda3 /mnt

이제 우분투에 설치된 Grub이 BIOS Grub(grub-pc 패키지)인지 EFI Grub(grub-efi 패키지)인지 확인한다.

$ ls -CF /mnt/boot/grub

만약, 실행 결과 i386-pc/ 폴더가 보이면 BIOS 모드로 우분투가 설치된 것이고, x86_64-efi/ 폴더가 보이면 UEFI 모드로 설치된 것이다. 두 가지가 모두 있다면 문제가 있는 것인데 그럴 가능성은 거의 없다. 단, 위의 USB에는 두 폴더가 다 있다.

그런데, 여기서 현재 USB로 부팅한 방식이 UEFI인지 BIOS 방식인지도 점검해볼 필요가 있다. 즉, Double Check 하자는 것이다.

$ ls -CF /sys/firmware

만약, 위의 실행 결과 efi/ 폴더가 없으면 USB는 BIOS 모드로 부팅한 것이고 efi/ 폴더가 보이면 UEFI 모드로 부팅한 것이다.

UEFI PC인 경우 두 가지 점검 결과가 동일해야 한다. Apple Mac PC의 경우에는 반드시 일치하지 않을 수도 있으나 부팅을 어떤 방식으로 했는지 부팅 시에 알 수 있어서 큰 문제가 없다.

아무튼, 현재 점검하고자 하는 것은 디스크에 설치된 우분투가 어떤 방식으로 설치됐는가 하는 것이므로 이를 바탕으로 Grub 복구 방식이 달라짐에 유의해야 한다.

BIOS 모드로 설치된 Ubuntu Grub 복구 방법

USB가 BIOS 모드로 부팅됐음을 확인하고, /dev/sda3에 우분투가 설치됐다고 가정하여,

$ sudo umount /mnt
$ sudo mount /dev/sda3 /mnt

$ for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
$ sudo chroot /mnt
$ sudo grub-install /dev/sda
$ sudo update-grub

UEFI 모드로 설치된 Ubuntu Grub 복구 방법

아래 두가지 방법 중 하나를 선택하면 된다.

1. Windows로 부팅 후 복구 방법

Windows 설치 후 Grub 메뉴로 진입할 수 없다면 Windows로 재부팅한 후, 관리자 권한으로 아래의 명령을 실행해야 한다.

bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi

재부팅 후 Grub에서 우분투로 부팅하여 아래의 명령만으로 EFI Grub이 복구될 수 있다.

$ sudo update-grub

2. Ubuntu 설치 USB로 복구 방법

우분투 설치 iso 이미지로 USB를 만들어 UEFI 모드로 부팅하면 최근의 15.04 버전까지도 grub-efi 패키지가 메모리의 우분투(USB로 부팅하면 RAM에 설치된 우분투가 기동됨)에 설치되지 않는다. grub-pc 패키지만 설치된다. 다만, grub-efi 패키지는 탑재되어 있어서 하드디스크에 우분투를 설치하면 grub-efi 패키지도 설치된다.

따라서, UEFI 모드로 USB로 부팅하고 나서 grub-efi 패키지를 메모리에 설치해야 한다. 아래와 같이하면 혹시 grub-efi 패키지가 설치되어 있더라도 패키지를 재설치해 주니까 안전하게 설치할 수 있다. 또한, 메모리에만 설치하는 것이므로 USB로 새로 부팅후 grub을 복구할 때마다 매번 설치해야 한다. 네트워크이 연결되어 있다고 가정하여,

$ sudo apt-get install --reinstall grub-efi

UEFI 모드 USB로 부팅됐음을 확인하고, UEFI 모드에서는 /dev/sda1이 ESP 파티션이며, /dev/sda3에 우분투가 설치됐다고 가정하여,

$ sudo umount /mnt
$ sudo mount /dev/sda3 /mnt
$ sudo mount -t vfat /dev/sda1 /mnt/boot/efi

$ sudo modprobe dm-mod
$ sudo grub-install --target=x86_64-efi --efi-directory=/mnt/boot/efi --bootloader-id=ubuntu --boot-directory=/mnt/boot --recheck --debug

재부팅 후 Grub 메뉴에 Windows가 보이지 않는다면 우분투로 재 부팅후,

$ sudo update-grub

참고 사항

현재 기동된 우분투에 grub-efi 패키지가 설치되어 있는지는 아래와 같이 확인할 수 있다.

$ ls -CF /usr/lib/grub

실행 결과 x86_64-efi/ 폴더가 보이면 grub-efi 패키지가 설치되어 있는 것이다. 이는 우분투 설치 iso이미지로 만든 USB로 UEFI 모드로 부팅 후 메모리의 우분투에 grub-efi 패키지가 설치되어 있는지 확인하기 위해서 필요하다. 또한, grub-install 명령이 제대로 동작하기 위해서 반드시 필요하다.

Ubuntu efibootmgr 활용


UEFI 모드로 설치된 Multi-OS 환경에서는 UEFI Booting을 지원하는 boot loader 들을 적절히 관리할 필요가 있다. 새로운 boot loader를 등록하거나 불필요한 boot loader를 삭제할 필요도 있고, boot loader 파일이 변경될 경우 NVRAM에 등록된 boot loader 정보를 갱신해 주어야 한다. 또, boot loader 간의 부팅 순서를 변경할 필요도 있다.

우분투를 포함한 Linux 환경에서 UEFI boot loader 정보를 관리하기 위한 도구가 efibootmgr이다. Windows에서는 bcdedit, Mac OS X에서는 bless를 사용할 수 있다. 여기서는 efibootmgr의 활용 방법에 대해 알아 본다. efibootmgr은 UEFI를 지원하는 PC 뿐만 아니라, EFI 환경의 Apple Mac PC에서도 사용할 수 있다.

부팅 정보를 직접 건드리기 때문에 부팅이 안되는 경우가 발생할 수 있으니 주의해서 사용해야 한다.

NVRAM에 등록된 boot loader 정보 확인

$ sudo efibootmgr -v
BootCurrent: 0001
Timeout: 5 seconds
BootOrder: 0080
Boot0000* Windows Boot Manager    ......
Boot0001* Ubuntu    ......
Boot0080* Mac OS X    ......
BootFFFF*     ACPI...... 

Grub2 boot loader 제거

위의 Ubuntu entry를 제거하려면 아래와 같이 하면 된다.

$ sudo efibootmgr -b 0001 -B

제거 됐는지 확인해 보면 아래와 같이 Boot0001* Ubuntu entry가 제거됐음을 알 수 있다.

$ sudo efibootmgr -v
BootCurrent: 0001
Timeout: 5 seconds
BootOrder: 0080
Boot0000* Windows Boot Manager    ......
Boot0080* Mac OS X    ......
BootFFFF*     ACPI......
제거 후에는 Ubuntu로 부팅할 수 없다.

Grub2 boot loader 신규 등록

다시 Ubuntu entry를 아래와 같이 추가하면 된다.

$ sudo efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\shimx64.efi -L "Ubuntu"

여기서 /dev/sda1이 ESP 파티션이다. 참고로, BIOS 메뉴에서 Secure Boot를 사용하지 않는 경우에는 shimx64.efi 대신 grubx64.efi를 사용해도 된다.

부팅 순서 변경

위에서 BootOrder: 0080으로 되어 있는데 Boot0080은 Mac OS X임을 알 수 있다. 즉, 기본적으로 Mac OS X로 부팅한다는 뜻이다. 앞서 Apple Mac에서 EFI Multi-OS Booting 방법을 따른다면 Mac 부팅시 Option 키를 누르지 않으면 Mac OS X로 부팅한다는 의미이다.

이제 아래와 같이 함으로써 부팅 순서를 Ubutu, Mac OS X, Windows 순으로 바꿀 수 있다. 부팅 순서를 바꾼다는 의미는 Ubuntu로 부팅할 수 없으면 Mac OS X, 그 마저 실패하면 Windows로 부팅한다는 뜻이다.

$ sudo efibootmgr -o 0001,0080,0000

아래와 같이 BootOrder가 변경됐음을 확인할 수 있다.

$ sudo efibootmgr -v
BootCurrent: 0001
Timeout: 5 seconds
BootOrder: 0001,0080,0000
Boot0000* Windows Boot Manager    ......
Boot0001* Ubuntu    ......
Boot0080* Mac OS X    ......
BootFFFF*     ACPI......

Grub에 Mac OS X Boot Entry 추가

위에서 Ubuntu로 부팅하도록 순서를 바꿨으면 Grub에 Mac OS X 부트 메뉴를 추가해 주어야 한다. 기존의 Grub 메뉴에 OS X boot entry가 있으나 이는 Hackintosh 용인 듯 하다. 아래와 같이 /etc/grub.d/40_custom 파일에 아래 내용을 추가해서 저장한다.

$ sudo nano /etc/grub.d/40_custom
 menuentry "Apple Intel-Mac OSX" {
    # Search the root device for Mac OS X's loader.
    search --file --no-floppy --set=root /usr/standalone/i386/boot.efi
    # chainload the loader, pass parameters like -v directly
    chainloader (${root})/usr/standalone/i386/boot.efi #-v
}
$ sudo update-grub

update-grub 만으로도 Windows 메뉴 엔트리는 Grub에 자동으로 포함된다.

이제 Mac에서 부팅시에 Option 키를 누르지 않으면 Ubuntu Grub으로 부팅한다. Grub에서 부팅하려는 OS를 선택할 수 있다. 물론 Option 키를 눌러서도 부팅하려는 OS를 선택할 수 있다.

Apple Mac에서 EFI Multi-OS Booting



Apple Mac에서 EFI Multi-OS 설치 방법에서는 rEFInd를 사용해서 Triple-OS Booting하는 방법을 다루었는데 여기서는 rEFInd를 사용하지 않고 Mac 자체의 boot manager를 이용해서 Triple-OS booting 하는 방법에 대해 설명한다. 최종 목표는 Mac booting시 Option Key를 눌렀을 때 위의 사진과 같이 EFI 모드로 설치된 Triple-OS 부팅 선택 화면이 나오도록 하자는 것이다.

기본적인 개념은 UEFI Booting에서 다루었던 ESP 파티션의 fallback boot loader를 Windows boot loader로 대체함으로써 Windows 부트 메뉴가 보이도록 하고, Ubuntu 부트 메뉴 설정은 Mac에서 부트 메뉴가 보이도록 하는 방법을 따르는 것이다. 물론, Windows를 설치하지 않는 경우에는 fallback boot loader를 Grub boot loader로 대체하기만 하면 된다.

1. Mac OS X Boot Options

Mac OS X와 Recovery Mode 부트 메뉴는 별다른 설정이 필요하지는 않다. 다만, 나중에 모든 OS 별 Icon 이미지를 설정하는 방법에 대해서만 별도로 참고하면 된다.

2. Windows Boot Option

Mac OS X로 부팅한 후 터미널을 실행하여 다음과 같이 ESP 파티션을 마운트 한다.

$ sudo mkdir /mnt
$ sudo mount -t msdos /dev/disk0s1 /mnt

마운트 후 fallback boot loader를 Windows boot manager로 대체한다.

$ sudo cp /mnt/EFI/Microsoft/Boot/bootmgfw.efi /mnt/EFI/Boot/bootx64.efi

3. Ubuntu Boot Option

우분투의 경우에는 다소 복잡하다. 기본적으로 최소 10MB 크기의 추가적인 Apple hfs+ 파티션이 필요하다. 다행히 Apple Mac에서 EFI Multi-OS 설치 방법에서와 같이 추가적인 MacData 파티션을 만들어 두었다면 그것을 사용하는 것도 방법이다. Mac OS X의 터미널에서 아래의 과정을 따르면 된다. 여기서는 MacData 파티션의 Volume 명을 MDATA로 가정한다.

기본적으로 새로운 Mac 파티션에 커널 파일이 있어야 하고,

$ sudo touch /Volumes/MDATA/mach_kernel

우분투 boot loader를 지정해 주어야 한다. 아래에서 ESP 파티션의 hard link를 사용할 수 없는 이유는 파티션 간의 hard link가 불가능하기 때문이다.

$ sudo mkdir /mnt
$ sudo mount -t msdos /dev/disk0s1 /mnt

$ cd /Volumes/MDATA
$ sudo mkdir ./EFI
$ sudo cp -R /mnt/EFI/ubuntu ./EFI/
$ sudo mkdir -p ./System/Library/CoreServices
$ sudo ln /Volumes/MDATA/EFI/ubuntu/grubx64.efi /Volumes/MDATA/System/Library/CoreServices/boot.efi

마지막으로, /Volumes/MDATA/System/Library/CoreServices/SystemVersion.plist 파일을 생성하여 아래의 내용을 추가해야 한다.
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
        <key>ProductBuildVersion</key>
        <string></string>
        <key>ProductName</key>
        <string>Linux</string>
        <key>ProductVersion</key>
        <string>Ubuntu</string>
</dict>
</plist>

4. Boot Options 메뉴에 OS 별 Icon 이미지 보이기

이제 Icon 이미지를 바꿔 주는 것이 좋다. 부트 메뉴의 Icon 이미지를 바꾸려면 ESP 파티션을 포함한 각 boot loader 가 탑재된 파티션에 해당 OS의 Icon 이미지를 /.VolumeIcon.icns 파일로 복사해 주면 된다. rEFInd 패키지에는 OS 별 아이콘 이미지 파일 들이 들어 있으므로 그것들을 활용하면 된다.

5. Mac Booting 후 Option Key Test

최종적으로, 기존에 설치된 rEFInd 패키지를 제거한다.

$ sudo rm -rf /EFI/refind

제거한 후, Mac을 재부팅하여 Option 키를 눌렀을 때 위의 사진과 같은 OS 선택 메뉴가 나오는지, 또 해당 OS로 제대로 부팅하는 지 확인해 본다.

기타 참고 사항

Mac에서 bless를 이용하여 Grub boot loader로 부팅하도록 할 수 있는데 아래와 같이 하면 된다.

$ sudo bless --folder=/Volumes/MDATA --file=/Volumes/MDATA/EFI/ubuntu/grubx64.efi --setBoot


참고 사이트

http://glandium.org/blog/?p=2830
https://help.ubuntu.com/community/UEFIBooting

Apple Mac에서 EFI Multi-OS 설치


최근의 Apple Intel-Mac PC 들은 UEFI 표준을 따르지는 않더라도 UEFI를 지원하는 OS 들을 EFI 모드로 쉽게 설치해서 사용할 수 있다. 예전부터 Mac에서는 Windows 설치를 지원하기 위해 Boot Camp를 지원해 왔으나 이것은 EFI 방식이 아니고 CSM BIOS emulation 방식을 이용한 것이었다. 이러다 보니 Ubuntu 조차도 Mac(AMD 64) iso 설치 이미지를 따로 제공하고 있는데 BIOS 모드로 설치할 수 있도록 하기 위한 것이다.

여기서는 Mac OS X가 설치된 Mac PC에서 EFI 모드로 Windows와 Ubuntu를 설치하여 Triple-OS 환경을 구성하는 방법에 대해 알아 본다. Mac은 모델이나 출시 연도에 따라서 H/W가 달라질 수 있지만 적어도 최근 2~3년 내의 기종들은 모델에 상관없이 이 글에서 언급하는 내용이 적용될 것이다. 물론, 개별 드라이버들을 별개로 설치해야 할 수도 있으나 대부분은 기본 OS 설치 만으로도 사용할 수 있는 수준이다. 즉, iMac, Macbook Pro (retina), Macbook Air, Mac Mini 등에 모두 적용할 수 있다.

OS를 EFI 모드로 설치하려면 H/W에서 당연히 UEFI/EFI를 지원해야 하고 OS도 UEFI를 지원하는 것들이어야 한다. Mac OS X는 기본으로 EFI 모드로 설치 되어 있고, Ubuntu는 12.04.2 이후, Windows는 Vista 이후 64-bit 버전들에 대해서만 UEFI를 지원한다. 세부 사항은 UEFI Booting을 참고하는 것이 좋다.

1. Disk Partition

Mac OS X에서 Disk Utility를 이용해서 Windows와 Ubuntu 설치를 위한 파티션 공간을 미리 확보한다. OS가 모두 설치된 후에 특정 OS의 파티션 Tool을 이용하여 파티션 변경을 할 경우, 변경하지 않은 다른 OS의 파티션 정보가 변경될 수 있다. OS간 파티션을 다루는 방식이 다룰 수 있기 때문이다. 파티션 정보가 변경되면 뜻하지 않게 Mac OS X를 포함한 특정 OS로는 부팅할 수 없는 상황이 생길 수 있다. gdisk 등을 이용하여 파티션 테이블을 백업해 두면 쉽게 극복할 수 있는 문제이기는 하다.

가장 좋은 방법은 사전에 파티션 계획을 잘 세워서 파티션을 변경하지 않도록 하는 것이다. 경험상, OS 별로 최소한 OS 파티션과 Data 파티션은 구분해 두는 것이 좋다. 나중에 OS 버전 업 등 OS 재설치시에 Clean Install을 쉽게 할 수 있기 때문이다. 그리고, OS가 지속적으로 Upgrade 됨을 감안하여 OS 파티션을 넉넉히 잡아 주는 것이 좋다. SSD만을 사용하는 경우에는 용량 부족으로 다소 제약이 생길 수는 있다. 참고로, Mac OS X는 50GB, Windows 7+은 60GB, Ubuntu는 20GB 정도는 최소 OS 파티션으로 잡아 주는 것이 좋다. 디스크 용량 제한이 없으면 OS 파티션은 모두 100GB 정도면 된다.

이제 UEFI 환경에서 OS 별로 필요한 파티션 들에 대해 대해서도 미리 생각해 둘 필요가 있다. (U)EFI 방식에서는 GPT 파티션 방식을 따른다. Mac OS X에서는 기본적으로 ESP(EFI System Partition)을 확보해 두고 있다. 아래에, Triple-OS에 대한 기본 파티션들을 열거 하였다. 즉, Triple OS를 위한 기본 파티션 갯수만 8개이다.
  • 공유: ESP 파티션 (OS 별 boot loader 탑재)
  • Mac OS X: OS 파티션, MacData 파티션
  • Windows: OS 파티션, WinData 파티션
  • Ubuntu: OS 파티션, UbuntuData 파티션, swap 파티션
ESP 파티션과 Mac OS X 파티션을 제외한 나머지 파티션들을 Disk Utiltity를 이용하여 파티션닝한다. Mac Data 파티션과 swap 파티션을 제외한 나머지 파티션 들은 모두 MS-DOS 파일시스템으로 해 두는게 편리하다.

아래에 iMac 1TB 디스크에 Triple-OS 설치 후 파티션 정보를 예로 들었다. 12개의 파티션이 있는데 3번과 4번의 Recovery HD는 Mac OS X Upgrade 시 Mac OS X 파티션을 쪼개서 자동으로 Recovery 파티션을 만든 것이고, 5번 파티션도 Windows 설치시 자동으로 생성한 파티션이다. 위에서 8개 + 3개 하면 11개여야 하는데 12개인 이유는 디스크 공간이 넉넉하기 때문에 리눅스 Data 파티션을 1개 더 만든 것이다.

$ sudo parted /dev/sda print
Model: ATA APPLE HDD ST1000 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system     Name                          Flags
 1      20.5kB  210MB   210MB   fat32           EFI system partition          boot
 2      210MB   99.6GB  99.3GB  hfsx            Apple_HFSX_Untitled_2
 3      99.6GB  100GB   650MB   hfs+            Recovery HD
 4      100GB   101GB   650MB   hfs+            Recovery HD
 5      101GB   101GB   134MB                   Microsoft reserved partition  msftres
 6      101GB   311GB   210GB   ntfs            Basic data partition          msftdata
 7      311GB   520GB   210GB   ntfs            Basic data partition          msftdata
 8      520GB   620GB   100GB   ext4
 9      620GB   720GB   100GB   ext4
10      720GB   736GB   16.0GB  linux-swap(v1)
11      736GB   894GB   157GB   ext4
12      894GB   1000GB  107GB   hfs+            Apple HFS/HFS+

2. EFI 모드로 Windows 설치

Mac에서 EFI 모드로 Windows를 설치하려면 Mac OS X의 Boot Camp를 사용해선 안된다. Boot Camp는 BIOS 모드로 부팅한다는 점 외에도 디스크 파티션 테이블을 Hybrid-MBR 방식으로 구성하므로 GPT 파티션 방식의 장점을 훼손하게 되고 파티션 변경에 매우 민감한 구조가 되어 Windows로 부팅하지 못하는 사태가 발생될 수 있다.

Windows 설치 iso를 USB로 굽되 Windows 8+인 경우 Rufus를 사용하여 uefi & gpt 방식으로 구워야 한다. 또한, Apple 홈페이지에서 Boot Camp 드라이버를 검색해서 미리 내려 받아서 USB에 복사해 둘 필요가 있다. 이 때, Boot Camp 드라이버가 자신의 Mac 모델과 반드시 일치해야 함에 유의한다.

Mac을 부팅하여 Option 키를 눌렀을 때 USB의 Windows EFI를 선택하여 부팅하면 되고, 설치시에 Windows OS 파티션과 Data 파티션을 모두 ntfs로 다시 포맷하는 것이 좋다. 설치 과정은 Windows 일반 설치 과정과 동일하다. Windows 설치가 완전히 끝난 후 Boot Camp 드라이버를 설치하면 Boot Camp 제어판을 이용해 Mac OS X로도 부팅할 수 있다.

3. EFI 모드로 Ubuntu 설치

우분투 사이트에서 Mac AMD가 아닌 일반 AMD 64-bit iso 이미지를 내려 받아서 Rufus를 이용해서 uefi & gpt 방식으로 굽는다(uefi & mbr 방식으로 구워도 된다). 또는, 앞서 작성한 게시물인 Ubuntu UEFI 모드 설치 USB 만들기를 따라해도 된다.

Mac을 부팅하여 Option 키를 눌렀을 때 USB의 EFI를 선택하여 부팅하면 되고, 설치 후 개별 드라이버들이 정상 동작하지 않을 경우가 있으므로 Ubuntu live 상태에서 기능들을 점검해 보는 것이 좋다. 적어도 live 상태에서 개별 드라이버에 문제가 없다면 설치 후 해당 드라이버 들의 문제는 쉽게 해결할 수 있다.

설치 시에 Linux 파티션을 OS와 Data 파티션을 ext4 파일시스템으로 포맷하면 된다. 앞서 생성한 우분투의 Data 파티션은 /home에 마운트 하도록 하고, 앞서 생성한 swap 파티션도 swap 파티션으로 지정한다. 나머지 설치 과정은 일반 우분투 설치 과정과 동일하다.

설치까지는 문제 없는데 설치 후 재 부팅해서 우분투로 부팅할 수 있는 방법이 아직 없다.

4. Triple-OS booting

Mac에서 Multi-OS booting이 가능하도록 하기 위한 가장 간단한 방법은 Mac OS X로 부팅하여 rEFIndrEFIt를 설치하는 것이다. rEFIt는 개발이 중단되었으므로 rEFInd를 사용하는 것이 좋다. 설치 후 Mac을 재부팅하면 rEFInd boot manager가 OS별 boot loader를 선택할 수 있도록 해준다.

rEFInd를 사용하지 않고 Mac 자체의 boot manager를 이용해서 Triple-OS booting 하는 방법에 대해서는 별도의 게시물인 Apple Mac에서 Multi-OS Booting을 참조하면 된다.

5. Ubuntu 개별 드라이버 설치

Mac에서 우분투 개별 드라이버 이슈를 알기 위해서는 다음 명령으로 Mac Model을 알 필요가 있다.

$ sudo dmidecode -s system-product-name

iMac13,2에서는 일단, WIFI가 문제였다. 다음 명령으로 WIFI 모델을 알 수 있다.

$ lspci -nn -d 14e4:

Broadcom BCM4331 모델인데 live USB에서 Broadcom proprietary driver가 정상 동작하는 것을 확인하였으므로, 우분투 live USB의 deb 패키지 파일을 복사해서 설치했다. 그리고, 설치하는 김에 kernel 업그레이드시 자동으로 모듈을 재설치할 수 있도록 dkms도 같이 설치했다.

$ sudo dpkg -i dkms_2.2.0.3-1.1ubuntu5_all.deb
$ sudo dpkg -i bcmwl-kernel-source_6.30.223.141+bdcom-0ubuntu2_amd64.deb

$ sudo depmod -a
$ sudo update-initramfs -c -k `uname -r`
$ sudo reboot

NVIDIA 드라이버의 경우 기본 설치된 nouveau도 화면 보호기가 제때 동작하지 않는 것을 제외하면 큰 문제는 없었으나 3D 가속기능을 사용하기 위해 proprietary driver를 사용하기로 했다. 문제는 우분투의 기본 드라이버는 정상 동작하지 않았다. NVIDIA 모델을 알기 위해서는 다음 명령을 사용하면 된다.

$ lspci | grep -i nvidia

NVIDIA에서 노트북용 GTX 675MX 최신 드라이버를 내려 받아서 설치했더니 그럭저럭 돌아간다. 사실, 약간의 문제가 있는데 일부 application에서 화면 떨림 현상이 잠깐씩 발생한다. 그리고, <Alt>+<Ctrl>+<F1> ~ <F5>를 눌러 Console 모드로 진입하면 black screen이 뜬다. 다행히, <Alt>+<F7> 키로 GUI로 되돌아 올 수는 있다. NVIDIA 드라이버 설치 방법은 Ubuntu 복구 모드(recovery mode) 활용을 참조하면 된다.

2014/08/25

UEFI Booting


최근 수년 내의 PC 들은 하드웨어적으로 UEFI를 기본적으로 지원하고 있었지만 UEFI 모드로 OS를 설치하는 사용자는 그리 많지 않았다. 물론, Mac OS X에서는 인텔 맥에 EFI를 채택한지 오래고, Windows는 Vista 이후 64-bit에서 UEFI를 지원하기 시작했으며, 우분투의 경우엔 12.04.2 버전 이후 64-bit에 대해 UEFI를 지원하기 시작했다. 2012년 10월 말 Windows 8 출시 이후, 이를 탑재한 PC 들이 보급되면서 UEFI로 부팅하는 PC가 본격적으로 늘어나고 있다. 그 전의 PC들은 Windows가 BIOS 모드로 탑재됐던데 반해 최신 Windows PC들은 UEFI가 기본이 됐기 때문이다.

여기서는 UEFI 환경에서 Multi-OS를 설치하기 위해 알아 두어야 할 몇가지 기본 사항에 대해 다룬다. 물론, 단일 OS 사용자라 해도 UEFI는 BIOS 방식을 대체할 수 밖에 없기 때문에 UEFI booting 방식에 대해 알 필요가 있다.

UEFI 방식의 장점

BIOS 방식과 비교해서 UEFI 방식을 사용함으로써 사용자가 실제로 느낄 수 있는 장점은 별로 많지 않을 수 있다.

부팅 속도가 빠르긴 하지만 대단한 차이는 아니고,  2TB 이상의 대용량 디스크를 사용할 수 있지만 일반 PC 사용자들에게 보편화 된 것은 아니다. 물론 추세적으로 몇 년 내에는 분명히 장점이 될 전망이다. 현 시점에서 가장 내세울 수 있는 장점은 주 파티션(Primary Partition) 수이다. BIOS 방식에서 사용하는 MBR 파티션은 최대 4개의 주 파티션 만을 허용하므로 OS를 여러 개 설치하려면 1개의 주 파티션을 이용한 확장 파티션을 사용해야 한다. 확장 파티션은 데이터의 안전성에 취약하다. 이에 반해 UEFI 방식에서는 GPT 파티션을 사용하는데 기본적으로 128개의 주 파티션을 만들 수 있다. 즉, Multi-OS 환경에서는 UEFI 방식이 장점이 될 수 있다.

UEFI 환경의 Boot Process

UEFI Firmware가 하드웨어를 초기화하고 나서 NVRAM에 등록된 boot manager 정보를 읽어 boot entry에 정의된 UEFI application을 실행한다. 이 application은 UEFI shell이 될 수도 있고 OS 별 boot manager/loader도 될 수 있다. boot manager는 또 다른 boot loader를 호출 할 수도 있고 최종 boot loader가 OS의 kernel을 호출함으로써 OS가 기동된다. 이 boot manager/loader 들은 OS 설치시 EFI System Partition에 설치된다.

EFI System Partiton(ESP)

UEFI firmware가 UEFI boot loader를 실행하기 위한 파티션을 EFI System Partition(ESP)이라고 한다. 즉, OS와는 독립적인 부트 파티션이라고 이해하면 된다. OS를 최초로 설치하면 여기에 UEFI shell이나 boot manager 또는 boot loader를 탑재한다. Multi-OS 환경에서는 OS 설치시 각각의 OS들이 자신들이 제공하는 boot loader를 ESP에 설치한다. ESP 파티션은 FAT 12/16/32 파일시스템을 사용해야 하고, Linux 환경에서는 gparted에서 boot flag를 설정해 주어야 한다. Microsoft에서는 파티션 최소 Size로 260MB를 권장하고 있다. 필수 사항은 아니지만, GPT 파티션을 최초 구성할 때 첫번째 파티션을 ESP로 잡아주는 것이 좋다. GPT 파티션들은 동등하지만 ESP 파티션은 PC가 부팅하기 위해서 반드시 필요한 파티션이다.

그런데, NVRAM의 boot entry의 정보가 깨졌거나 정보가 없을 때 UEFI 모드로 부팅을 할 수 있도록 하기 위해 기본 부트로더(Fallback boot loader)를 사용한다. 기본 부트로더는 ESP 파티션의 /EFI/Boot/bootx64.efi 파일이다.  ESP 파티션은 FAT 파일시스템을 사용하므로 대소문자 구분이 없고, 경로 명도 Windows 경로 방식을 사용하기도 한다. 즉, 기본 부트로더를 \efi\boot\BootX64.efi 라고 해도 이상할 것이 없다.

EFI System Partition 폴더 구조

아래에 Triple-OS 환경의 ESP 파티션 폴더 구조를 참고할 필요가 있다. 기본 부트로더인 /EFI/Boot/bootx64.efi 파일을 제외하면 OS 벤더별로 자신 만의 폴더 구조를 유지하고 있음을 알 수 있다. 기본 부트로더는 대체로 OS 설치 시 자신의 boot loader를 복사하는데 Mac의 경우엔 기본 부트로더가 없다. 이 경우엔 사용자가 grub2나 rEFInd와 같은 boot loader 파일을 복사해 주는 것이 좋다.

/-- EFI/
    |-- APPLE/
    |   `-- EXTENSIONS/
    |       `-- Firmware.scap
    |-- Boot/
    |   `-- bootx64.efi       : Fallback boot loader
    |-- Microsoft
    |   `-- Boot
    |       |-- BCD
    |       |-- BCD.LOG
    |       |-- BOOTSTAT.DAT
    |       |-- Fonts/
    |       |-- Resources/
    |       |-- boot.stl
    |       |-- bootmgfw.efi  : Windows boot manager
    |       |-- bootmgr.efi
    |       `-- memtest.efi
    `-- ubuntu/
        |-- MokManager.efi    : Machine owner's key manager
        |-- grub.cfg          : redirect to grub-efi installed partition/folder
        |-- grubx64.efi       : Grub2 boot loader with secure boot disabled
        `-- shimx64.efi       : Grub2 boot loader with secure boot enabled

참고 사항

최근의 PC 들은 UEFI Firmware를 대체로 내장하고 있으나 제조사 별로 UEFI 표준을 정확히 따르지는 않고 있음에 유의할 필요가 있다. Apple Mac의 경우에도 자체 EFI 방식을 사용하고 있다.

또한, UEFI 규격에는 CSM(Compatibilty Support Module)이 있어서 Legacy BIOS emulation을 지원하므로 사용자들은 자신의 PC가 UEFI 모드로 부팅되고 있는지 BIOS 모드로 부팅되고 있는지 모를 수도 있다. Firmware에 설정된 방식으로 부팅하므로 OS 설치시에는 반드시 현재 설정된 모드로만 설치가 가능하다는 점에 유의해야 한다.

부팅시에 BIOS Setup UI를 사용한다는 것은 더이상 정확한 표현은 아니지만 의사 소통을 위해 관행에 따라야 할 것이다. Apple Mac의 경우에는 BIOS Setup UI가 없이 파티션 정보를 가지고 EFI 모드로 부팅하거나 CSM(BIOS) 모드로 부팅할 수 있다.


참고 사이트

https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface
http://www.rodsbooks.com

2014/08/21

Ubuntu XKB를 이용한 keyboard map 확장


우분투에서 한영키를 설정하는 방법에 대해서 정리했지만 좀더 나은 방법을 찾아 보았다. 결론적으로는 나은 방법을 찾은 것은 아니다. 다만, XKB를 사용함으로써 이런 문제 들을 해결할 수 있는 가능성이 있다는 점에 만족해야 한다.

예전에는 X-Window 환경에서 키보드 맵핑에 Xmodmap을 사용했는데 언제부터인가 XKB를 사용하는 것 같다. XKB 사용법을 local 사용자 환경에 적용하는 방법과 전체 시스템 환경에 적용하는 방법에 대해 정리한다. 한영키를 입력소스 toggling에 사용할 수 있도록 지정하는 것과 오른쪽 Alt 키를 한영키에 맵핑하는 예를 들었다.

참고로, 이렇게 해서 ibus에서 한영키가 동작하지는 않는다. ibus 소프트웨어 자체의 키보드 맵핑 로직이 있기 때문이다.

Local 사용자 환경에 XKB 적용하기

사용자 폴더에 XKB가 사용할 폴더 구조를 만든다.

$ mkdir -p ~/.xkb/{keymap,symbols}

키보드 맵핑을 바꾸려는 내용을 파일로 만들어 저장한다.

$ gedit ~/.xkb/symbols/hangul_kbd
// /usr/share/X11/xkb/symbols/group
// Hangul key toggle
partial modifier_keys
xkb_symbols "hangul_toggle" {
    key <HNGL> {        [  ISO_Next_Group,      Hangul  ]       };
};

// /usr/share/X11/xkb/symbols/altwin
// Alt_R key is mapped to Hangul key
partial modifier_keys
xkb_symbols "hangul_ralt" {
    key <LALT> { [ Alt_L, Meta_L ] };
    key <RALT> { type[Group1] = "TWO_LEVEL",
                 symbols[Group1] = [ Hangul ] };
    modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
//  modifier_map Mod4 {};
};
$ setxkbmap -print > ~/.xkb/keymap/hangul.xkb

위의 명령으로 생성된 파일에서 xkb_symbols 라인에 위의 hangul_kbd를 아래와 같이 추가한다. 아래의 내용에서 위의 hangul_kbd 파일 내용 중 hangul_toggle 부분만 적용하고자 할 때는 hangul_kbd 대신 hangul_kbd(hangul_toggle)을 사용하면 된다.

$ gedit ~/.xkb/keymap/hangul.xkb
// Generated from "setxkbmap -print" and added xkb_symbols part.
xkb_keymap {
    xkb_keycodes { include "evdev+aliases(qwerty)" };
    xkb_types    { include "complete" };
    xkb_compat   { include "complete" };
    xkb_symbols  { include "pc+kr+us:2+inet(evdev)+hangul_kbd" };
    xkb_geometry { include "pc(pc105)" };
};
이제, 현재 사용자 환경에 바로 적용할 수 있는데 아래의 명령으로 가능하다.

$ xkbcomp -I$HOME/.xkb ~/.xkb/keymap/hangul.xkb $DISPLAY

매번 로그인 할 때마다 적용하기 위해서는 ~/.xinitrc 파일에 위의 명령을 추가해 주면 된다.

시스템 전체 환경에 XKB 적용하기

nano 등 편집기를 이용해 /usr/share/X11/xkb/symbols/group 파일 맨 위에 아래 내용을 추가한다.
$ sudo nano /usr/share/X11/xkb/symbols/group
// /usr/share/X11/xkb/symbols/group
// Hangul key toggle
partial modifier_keys
xkb_symbols "hangul_toggle" {
    key <HNGL> {        [  ISO_Next_Group,      Hangul  ]       };
};
nano 등 편집기를 이용해 /usr/share/X11/xkb/symbols/altwin 파일 맨 위에 아래 내용을 추가한다.
$ sudo nano /usr/share/X11/xkb/symbols/altwin
// /usr/share/X11/xkb/symbols/altwin
// Alt_R key is mapped to Hangul key
partial modifier_keys
xkb_symbols "hangul_ralt" {
    key <LART> { [ Alt_L, Meta_L ] };
    key <RALT> { type[Group1] = "TWO_LEVEL",
                 symbols[Group1] = [ Hangul ] };
    modifier_map Mod1 { Alt_L, Alt_R, Meta_L, Meta_R };
//  modifier_map Mod4 {};
};
수정한 내용이 시스템에 반영되기 위해서는 컴파일된 xkb 캐시 파일들을 삭제 후 재로그인 해야 한다.

$ sudo rm -rf /var/lib/xkb/*.xkm

로그아웃 했다가 다시 로그인 하면 grp(hangul_toggle)과 altwin(hangul_alt)를 사용할 수 있게 된다.

ibus에서 XKB 사용하기

ibus에서는 위의 시스템 전체 환경에 XKB 적용하기를 활용하면 한영키를 사용하도록 할 수 있다. 그러나 이 방법은 좋은 방법이 아니므로 권하고 싶지는 않다.

위에서는 grp(hangul_toggle)과 altwin(hangul_alt)를 새로 추가한 것이지만 기존의 키보드 맵을 수정하면 ibus가 그것을 사용하도록 할 수 있다. 예를 들면, 다음 명령으로 ibus가  grp(menu_toggle)을 사용하도록 한다.

$ gsettings set org.gnome.desktop.input-sources xkb-options "['grp:menu_toggle']"

그리고 나서 /usr/share/X11/xkb/symbols/group 파일의 "menu_toggle" 부분을 아래의 내용으로 대체해 버리면 된다.
// /usr/share/X11/xkb/symbols/group
// Hangul key toggle
partial modifier_keys
xkb_symbols "menu_toggle" {
    key <HNGL> {        [  ISO_Next_Group,      Hangul  ]       };
};
변경 사항을 적용하려면 xkm 파일 들을 지우고 다시 로그인 해야 한다.


별로 도움이 되는 내용은 아니지만 나중에 참고하기 위해 정리해 둔다.

참고 사이트

http://madduck.net/docs/extending-xkb
https://wiki.archlinux.org/index.php/X_KeyBoard_extension

2014/08/18

Ubuntu UEFI 모드 설치 USB 만들기


제목을 "Ubuntu UEFI 모드 설치 USB 만들기"로 달았지만, 이 글은 사실, "UEFI와 BIOS를 모두 지원하는 우분투 설치 USB 만들기"가 정확할 것이다.

우분투 설치 USB 만들기에 대한 글은 사실 널려 있다. 그리고, 우분투 한국 커뮤니티에도 "Super Grub2 Disk를 이용한 우분투 Live/설치 USB 만들기"를 올린 적이 있다. 따라해 보라고 알려 줘도 당장 설치하고자 하는 마음이 앞서기 때문에 빠른 방법을 찾는 듯하다. 즉, 간단히 RufusUNetbootin, Universal USB Installer 등과 같은 USB 굽기 Tool을 사용하면 된다. 또, 버그가 있었지만 우분투가 기본으로 제공하는 Startup Disk Creator도 있다. 다만, 굳이 이런 Tool을 사용하고 싶다면 Rufus가 좋다. Rufus는 BIOS와 UEFI 방식을 모두 지원한다.

물론, 위의 글이 갖는 한계도 있다. Windows 사용자가 처음 리눅스를 설치하고자 한다면 우분투 환경이 없기 때문에 불가능한 방법이다(사실, 이 경우라면 Virtual Box에 우분투 설치해서 먼저 써 보는게 좋고, 자연스레 우분투 환경이 만들어 진다). 그리고, 우분투 사용자라고 하더라도 Super Grub2 Disk라는 생소한 Tool을 또 배워야 한다는 부담감이 있다(배우는데 30분이면 족하지만).

사실, 편하기로 따지자면 앞서의 Super Grub2 Disk를 이용한 USB 만들기를 사용할 것을 권하고 싶다. 왜냐하면 Super Grub2는 단순히 Grub2 Script를 이용해서 Grub2의 기능을 100% 이상 활용하기 때문이다. 결과적으로는 PC에서 부팅할 수 있는 Windows, Mac OSX, 온갖 Linux 배포판, FreeBSD 등을 포함한 대부분의 OS와 iso 이미지, 커널, (U)EFI/BIOS boot loader 등 대부분의 부팅 방식 들을 지원하기 때문이다. OS가 설치됐지만 갑자기 부팅이 안될 때 Super Grub2는 매우 유용하다.


여기서는, 우분투 환경이 있어야 한다는 제약은 있지만, Super Grub2를 사용하지 않고 순수하게 우분투 기본 환경에서 우분투 설치 USB를 만드는 법을 정리한다. 이 방법의 장점은,
  • 우분투 사용자 입장에서 별도의 Tool이 불필요
  • 매번 USB 굽기에 따른 USB 데이터 손실이 없음: 즉, USB 고유의 Data 보관기능 유지
  • iso 이미지 파일만 교체 또는 추가하면되므로 우분투 버전업이 용이함
  • BIOS 방식과 UEFI 방식을 모두 지원함
  • 32-bit와 64-bit iso 이미지 모두 지원함
  • Apple Mac H/W에 우분투 설치시 별개의 복잡한 USB 만들기 절차 불필요
별도의 Tool이 불필요한 점을 제외하면, Super Grub2를 이용한 USB 만들기 방법이 장점이 더 많다는 점을 한번 더 강조하고 싶다. 그리고, 이 방법이 기존의 iso 이미지를 굽지 않는 방법과 다른 점은 최신 Window 8/8.1이 설치된 PC 들이 대부분 UEFI 방식으로 부팅하기 때문에 UEFI 방식을 지원한다는 점이다.

1. 1GB 이상의 빈 USB를 준비하여 gparted를 이용, GPT 파티션 생성

여기서는 3개의 파티션을 사용하고, 1번은 ESP(EFI System Partition, 200MiB), 2번은 BIOS Grub 용(1MiB), 3번은 iso 이미지 용(나머지 USB 용량) 할당한다. USB 용량이 8GB 이상이면 파티션 수를 많이 늘려서 여러가지 목적으로 활용 가능하다. GPT 파티션은 기본적으로 128개 까지 Primary Partition을 만들 수 있다.

$ sudo gparted /dev/sdb

먼저, Partition Table을 msdos가 아닌 gpt로 구성하고, 아래의 parted 실행 결과처럼 파티션을 나눈 후 gparted에서 빠져 나온다. 참고로, 아래의 2번 파티션은 gparted에서 unformatted 상태로 bios_grub Flag를 설정한 것임에 유의한다. 사실, 3번 파티션은 ext2가 아닌 아무 파일 시스템이나 상관없다. bios_grub 파티션은 GPT 파티션에 BIOS Grub을 설치하기 위해 필요하다.

$ sudo parted /dev/sdb print
Model:  USB DISK 2.0 (scsi)
Disk /dev/sdb: 3880MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
1      1049kB  211MB   210MB   fat32              msftdata
2      211MB   212MB   1049kB                     bios_grub
3      212MB   3880MB  3668MB  ext2
참고로, 리눅스 설치 만이 목적이라면 굳이 GPT 파티션을 사용할 필요가 없고, 파티션도 1개로 해도 된다. 즉, MBR (gparted의 msdos) 파티션을 사용하고 1개의 fat32 파티션을 사용해도 우분투는 BIOS와 UEFI 모드로 모두 설치할 수 있다.

2. Ubuntu 사이트에서 우분투 설치 iso 파일을 내려 받아 기본 EFI boot loader 복사

참고로 32-bit PC일 지라도 64-bit PC에서도 부팅할 수 있도록 아래의 과정을 해 두자. 그리고, 이 과정에서 현재 버전을 사용하지만, 한번만 해두면 이후엔 최신 버전으로 교체할 필요는 없다.

$ sudo mkdir /tmp/mnt
$ sudo mount -o loop ~/Downloads/ubuntu-14.04.1-desktop-amd64.iso /tmp/mnt

$ sudo mount /dev/sdb1 /mnt
$ sudo cp -R /tmp/mnt/EFI /mnt
$ sudo cp -R /tmp/mnt/boot /mnt/

3. Ubuntu 사이트에서 내려 받은 우분투 설치 iso 파일들을 3번 ext2 파티션에 복사

여기서는 실제 설치할 우분투 버전의 iso를 사용한다. 즉, 32-bit PC 라면 32-bit iso 파일을 사용해야 한다. iso 파일들은 USB 3번 파티션의 /boot-isos 폴더에 복사함에 유의한다. 또한, USB 용량이 넉넉하다면 여러 개의 iso 파일을 복사해서 나중에 선택해서 부팅 가능하다. 우분투 설치 iso 용량이 늘어나는 추세이고 USB에 복사하는 것이라 시간이 많이 걸린다.

$ sudo umount /mnt
$ sudo mount /dev/sdb3 /mnt
$ sudo mkdir /mnt/boot-isos

$ sudo cp ~/Downloads/ubuntu-14.04.1-desktop-amd64.iso /mnt/boot-isos
$ sudo cp ~/Downloads/ubuntu-14.04.1-desktop-i386.iso /mnt/boot-isos
$ sudo sync

4. USB의 grub.cfg 파일에 부팅 메뉴 생성

$ sudo umount /mnt
$ sudo mount /dev/sdb1 /mnt
$ sudo nano /mnt/boot/grub/grub.cfg

nano 등의 편집기를 이용해서 USB의 /boot/grub/grub.cfg 파일에 아래의 내용을 추가하되, 기존의 파일 내용은 모두 지우는 게 나중에 부팅시 혼란스럽지 않다. 아래의 내용 중에 중요한 것은, 위의 3번에서 지정한 USB의 파티션과 iso 파일명/파일 경로가 일치해야 한다는 점이다. 참고로, 64-bit의 경우 우분투 12.04.2 이후 UEFI를 지원하면서 iso 파일 내의 리눅스 커널명이 "vmlinuz.efi"가 되었다. 그 전에는 "vmlinuz"를 사용했었다.

menuentry "USB Ubuntu 64-bit" {
   set isofile="/boot-isos/ubuntu-14.04.1-desktop-amd64.iso"
   loopback loop (hd0,3)$isofile
   linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd.lz
}

menuentry "USB Ubuntu 32-bit" {
   set isofile="/boot-isos/ubuntu-14.04.1-desktop-i386.iso"
   loopback loop (hd0,3)$isofile
   linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject
   initrd (loop)/casper/initrd.lz
}

5. BIOS 모드로 부팅된 PC에서 BIOS Grub(grub-pc) 설치

현재 PC가 BIOS 모드로 부팅한 것인지 EFI 모드로 부팅한 것인지 알 필요가 있다.

$ ls -CF /sys/firmware

실행 결과 efi/ 폴더가 없으면 BIOS 모드, efi/ 폴더가 보이면 EFI 모드로 부팅한 것이다. BIOS 모드로 우분투를 설치하면 grub-pc 패키지가 설치되고, EFI 모드로 설치하면 grub-efi 패키지가 설치 됨에 유의한다.

따라서, 현재 PC가 EFI 모드로 부팅했다면 BIOS Grub을 설치하기 위해서는 반드시 BIOS Grub이 설치된 PC가 필요하다. 즉, BIOS 모드로 부팅할 PC가 없다면 아래의 과정은 불필요하다. 참고로, Virtual Box로 우분투를 설치하면 기본적으로 BIOS 환경이 된다. EFI를 지원하는 PC에서 Virtual Box는 EFI 모드도 지원한다.

$ sudo umount /mnt
$ sudo mount /dev/sdb1 /mnt
$ sudo grub-install --recheck --boot-directory=/mnt/boot /dev/sdb


우분투 설치 USB의 활용

향후에 우분투 새 버전을 설치하고자 할 때에는 USB에 복사할 iso 파일명이 달라질 것이고, 이에 따라 USB의 grub.cfg 파일에서 iso 파일명을 수정해 주어야 한다. 즉, 위의 3번과 4번 과정만 반복하면 된다.

이제 이렇게 만들어진 우분투 설치 USB는 Mac을 포함한 아무 PC 에서나 우분투를 설치할 수 있다. 더구나, 우분투 설치 iso는 Live 기능이 있으므로 굳이 우분투를 설치하지 않아도 USB로 부팅해서 현재 우분투 버전이 내 PC H/W에서 잘 동작하는지 확인해 볼 수 있다. 또한, 이 USB를 이용하여 부팅이 안되는 PC를 복구하거나 Data를 백업 받을 수도 있다.

추가적으로, 이 글의 방법대로 만든 USB를 활용하면 1개의 USB로 우분투 설치는 물론이고, UEFI 모드의 Windows와 Mac OSX 설치까지 가능한 Triple-OS USB Installer도 만들 수 있다.

2014/08/17

Ubuntu 14.04 Unity 활용


우분투 14.04에서 Unity가 많이 안정화 되었다. 몇가지 유니티 활용 Tip을 정리한다. Facebook "우분투한국사용자모임"에 올렸던 글이다.

1. 기본 HUD(Heads-up-display) 단축키(오른쪽 Alt)를 F2 키로 변경:
* [시스템 설정] > [키보드] > [바로가기] 탭 > [런처] > [허드를 표시할 키] > F2
* 참고: 한영키 대신 오른쪽 Alt키를 사용하는 경우 필요

2. Launcher(왼쪽 패널)에 없는 앱 실행
* Super 키(Windows 로고 키) > Dash 검색 창에서 키워드 검색 후 마우스 double-click
* 한글화 되지 않은 앱도 있으므로 영문 이름/키워드로 검색 권함
예1) gnome-terminal: Dash 검색창에서 "터미널" 또는 "terminal" 검색
예2) gnome-screenshot: "screen" 또는 "capture"로 검색

3. Launcher에 자주 쓰는 앱 아이콘 등록
* 2번 앱 실행 상태에서 Laucher의 해당 앱 아이콘 마우스 우클릭: [런처에 고정] 메뉴 선택

4. Launcher 상의 아이콘 위치 변경:
* 마우스로 앱 아이콘 Drag & Drop

5. Launcher 앱 아이콘 크기 조정
* [시스템 설정] > [모양] > [모양] 탭 > [런처 아이콘 크기] > 슬라이더로 조정

6. Launcher 자동 숨기기
* [시스템 설정] > [모양] > [동작방식] 탭 > [런처 자동 숨기기] > [켬]
* 런쳐 표시: [왼쪽 가장자리] 또는 [왼쪽 위 모서리]로 마우스 포인터 갖다 댐

7. 앱 윈도우 메뉴를 앱 창 제목에 보이기
* [시스템 설정] > [모양] > [동작방식] 탭 > [창 메뉴 보이기] > [창 제목 표시줄에 보이기] 선택

8. Launcher에서 작업공간 이동 아이콘 등록
* [시스템 설정] > [모양] > [동작방식] 탭 > [작업 공간 바꾸기 사용] 선택

9. 실행 앱을 다른 작업공간으로 이동하기
* Launcher의 [작업공간 바꾸기] 아이콘 선택 > 원하는 앱 선택 후 마우스로 Drag & Drop
* 작업공간을 바꾸려면 [작업공간 바꾸기] 아이콘 선택 후 원하는 작업공간 선택

10. Dash 창 크기 변경
* Netbook과 같이 작은 화면에서도 Dash가 전체화면 차지하지 않도록 설정
$ gsettings set com.canonical.Unity form-factor "Desktop"
* Dash가 전체 화면 차지하도록 설정
$ gsettings set com.canonical.Unity form-factor "Netbook"
* 기본 설정으로 복귀
$ gsettings set com.canonical.Unity form-factor "Automatic"

11. 컴피즈 설정 관리자를 이용한 Unity 환경 설정
* 컴피즈 설정 관리자 설치 후 실행
$ sudo apt-get install compizconfig-settings-manager
터미널에서 ccsm 명령으로 실행하거나 Dash 창에서 compiz로 검색하여 실행

* 상단 패널 투명도 설정
[컴피즈 설정 관리자] > [Ubuntu Unity Plugin] > [General] 탭 > [Panel Opacity] > 0.3
* Launcher 패널 투명도 설정
[컴피즈 설정 관리자] > [Ubuntu Unity Plugin] > [Launcher] 탭 > [Launcher Opacity] > 0.3
* Launcher 아이콘 선택시 실행 앱 창 Minimize 활성화
[컴피즈 설정 관리자] > [Ubuntu Unity Plugin] > [Launcher] 탭 > [Minimize Sigle Window Applications (Unsupported)] 선택

12. 유용한 단축 키
* 단축 키 보기: <Super> 키 길게 누르기
* 터미널 실행: <Ctrl>+<Alt>+<t>
* 실행 앱 전환: <Alt>+<Tab>
* 현재 작업공간 내 실행 앱 창보기 상태에서 전환: <Super>+<w>
* 모든 작업공간 실행 앱 창보기 상태에서 전환: <Super>+<Shift>+<w>

13. 아직 유용해 보이진 않지만 HUD 사용법
* HUD는 실행 중인 특정 앱의 세부 메뉴를 키 입력으로 실행하는 기능임
* 실행 중인 특정 앱 창을 선택한 상태에서 HUD 단축키로 해당 앱의 메뉴검색
예) gedit 실행 후 HUD 단축키(1번에서 F2로 변경함) 누른 후 side 입력

Ubuntu 복구 모드(recovery mode) 활용


우분투 복구 모드로 진입해야 하는 경우가 드물게 생긴다. 주로, NVIDIA 드라이버를 설치 또는 제거하거나 File System의 일부가 깨져서 fsck를 돌려야 할 경우이다. 복구 모드는 부팅 후 Grub 메뉴에서 Advanced Ubuntu Options에서 Recovery Mode를 선택하여 진입한다.

여기서는, 복구 모드에서 하드 디스크에 쓰기가 가능하도록 하는 방법과 그 후 콘솔에서 WIFI를 사용하는 방법, 그리고 NVIDIA 드라이버를 설치 및 제거 하는 방법들을 정리한다.

하드 디스크 쓰기

우분투 복구 모드로 부팅하면 메뉴가 뜨는데 root command prompt를 선택한다. 그 후 다음 명령만으로 쓰기가 가능해 진다.

$ mount -o rw,remount /

그런데, root partition 외에 다른 파티션도 사용할 필요가 있다면 해당 파티션을 추가로 마운트 한다. 원래는 mount -a 명령으로 /etc/fstab에 등록된 모든 파티션이 마운트 되는데 우분투 14.04에서는 안되더라. 필요한 파티션을 각각 마운트 해주면 된다.

$ mount /home

복구 모드에서 WIFI 사용하기

가끔 복구 모드에서 네트워크를 사용해야 할 때가 생긴다. 그런데, WIFI my_SSID와 my_password를 무선 공유기에 알려 주어야 하므로 해당 설정 파일을 수동으로 만들어 둘 필요가 있다.

$ wpa_passphrase my_SSID my_password > ./wpa_supplicant.conf

위의 파일을 vi나 nano 등의 편집기를 사용하여 아래의 내용과 같이 수정해 준다.

$ cat  ./wpa_supplicant.conf
ctrl_interface=DIR=/run/wpa_supplicant
update_config=1
fast_reauth=1
# ap_scan may be: 0, 1, 2
ap_scan=1
network={
    ssid="my_SSID"
    #psk="my_password"
    psk=ba4467448e288e60d085fd5b50282d6d59cfd08
}
이제 WIFI daemon을 실행 한다.

$ wpa_supplicant -B -i wlan0 -c ./wpa_supplicant.conf
$ dhclient wlan0 &

WIFI에 접속이 됐는지 확인하려면,

$ sleep 3
$ route -n
$ nslookup google.com

NVIDIA 드라이버 설치하기

NVIDIA 홈페이지에서 내려 받은 드라이버를 설치하기에 앞서 오픈소스 드라이버인 nouveau 모듈이 부팅시에 로딩되지 않도록 해야 한다. /etc/modprobe.d/blacklist.conf 파일에 아래의 한 줄을 추가해 준다.
blacklist nouveau
설치는 아래와 같이 내려 받은 파일을 실행하여 따라가면 된다. 이 과정에서 64-bit 우분투인 경우에 라도 나중에 WINE 등을 설치할 경우를 대비해 32-bit 라이브러리도 설치해 두는 게 좋다.

$ sh NVIDIA-Linux-x86_64-340.24.run
$ sudo reboot

NVIDIA 드라이버 제거 및 다시 nouveau 드라이버 복구하기

NVIDIA 드라이버 설치 후 부팅했는데 정상동작하지 않아서 다시 nouveau 드라이버로 우분투를 구동하기 위해서 다음 과정이 필요하다. 참고로, NVIDIA 드라이버는 버전에 따라 자신의 PC와 잘 맞는게 있고 그렇지 않은게 있다. 다시 복구 모드로 부팅하여 아래와 같이 제거한다.

먼저, 앞서 추가했던 /etc/modprobe.d/blacklist.conf 파일에서 blacklist nouveau를 삭제하고,

$ sh NVIDIA-Linux-x86_64-340.24.run --uninstall
$ sudo reboot

다시, 부팅 후 로그인은 되는데 바탕화면만 나오고 아무것도 할 수 없을 경우에는 <Control>+<Alt>+<F2>를 눌러 콘솔 모드로 로그인한다. 로그인 후,

$ sudo service lightdm stop
$ sudo apt-get install --reinstall xserver-xorg-core libgl1-mesa-glx
$ sudo service lightdm start

위와 같이 OpenGL 드라이버를 다시 설치하고 나서 <Alt>+<F7> 키를 누르면 X-Window로 로그인 할 수 있다.

우분투 OpenGL 관련 라이브러리 업데이트 후 NVIDIA 문제 해결

Proprietary NVIDIA 드라이버 사용시 Ubuntu Daily Update 후 재부팅하면 로그인은 되는데 바탕화면만 나오고 아무것도 할 수 없는 문제가 또 생긴다. 이는 OpenGL 라이브러리 또는 xserver-xorg-core 패키지가 업데이트 될때 NVIDIA 라이브러리를 덮어 쓰기 때문에 발생하는 문제이다. NVIDIA 드라이버를 다시 설치해 주면 문제가 해결된다.

Ubuntu 14.04 ibus 한영키 설정과 이슈


국내 우분투 사용자들이 우분투를 처음 설치하거나 버전 업그레이드 할 때 가장 큰 관심거리가 한영키 설정 문제일 만큼 골칫 덩어리이다. 기본 한글 입력기인 ibus-hangul이 제대로 동작하지 않기 때문이다. 이로 인해 ibus 대신 nabi나 uim, fcitx를 사용하기도 한다. nabi와 ibus-hangul 개발자가 동일하므로 기왕이면 ibus-hagul 관련 문제들을 한번에 해결해 주면 좋겠다는 바램도 있지만 개인의 희생을 계속 강요하기엔 무리가 있다. 국내 오픈소스 개발자 저변이 열악한 점을 고려하면 정부에서 어느 정도 지원이 필요하다는 생각이다.

우분투 한국 커뮤니티의 "우분투 14.04 한글 이슈 정리"를 보완하는 측면에서 몇가지를 추가적으로 정리해 보려고 한다. 물론, 내가 사용해 본 환경에 국한할 수 밖에 없다. 여기서는 기본 입력기인 ibus-hangul에 대해서만 정리한다. 또, "한영키"란 키보드 상의 <한/영> 키를 말한다.


ibus 한영키 설정

한영키를 설정하기에 앞서 한글 언어 팩 중 일부가 누락되는 경우가 많기 때문에 한글 언어팩을 완전하게 설치할 필요가 있다. [시스템 설정] > [언어지원] > [언어] 탭에서 [English]를 맨 위로 마우스 드래그 해서 [시스템 전체에 적용] 후 로그아웃, 재로그인 후 다시 같은 메뉴 탭에서 [한국어]를 맨 위로 끌어 올려서 [시스템 전체에 적용] 후 재로그인 하면 언어팩이 자동 재설치 된다.

공통 적용 사항

$ gsettings set org.freedesktop.ibus.panel show 0
$ gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "['<Shift>space']"

Ubuntu 14.04 Unity Desktop

유니티 환경에서는 [시스템 설정] > [텍스트 입력창] > [다음 소스로 전환:] 메뉴에서 입력 소스키를 변경하도록 바귀었다. 문제는 여기에 한영키가 등록이 안되므로 dconf-editor를 사용하거나 아래의 방법을 사용한다.

< 노트북 키보드(101/104 키) >
$ gsettings set org.gnome.desktop.input-sources xkb-options "['compose:ralt']"
$ gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['Multi_key']"

< 데스크탑 키보드(105 키 이상) >
$ gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['Hangul']"

Ubuntu 14.04 Gnome3 Shell (Gnome Desktop)

Gnome3에서는 [시스템 설정] > [키보드] > [바로가기] 탭 > [자판입력] > [Modifiers-only switch to next source] 에서 지정한 키가 ibus 한영 전환이 된다. 여기서 <오른쪽 Alt> 키를 지정하거나 아래의 방법을 사용한다.

< 노트북 키보드(101/104 키) >
$ gsettings set org.gnome.desktop.input-sources xkb-options "['grp:toggle']"

< 데스크탑 키보드(105 키 이상) >
한영키를 지정할 수 있는 방법을 현재로서는 못찾음. 대신, 위의 노트북 키보드 설정을 이용한면 <오른쪽 Alt>키를 한영 전환키로 사용 가능

Ubuntu 13.10 이전 버전과 Lubuntu/Xubuntu 14.04 및 Mint 17 Cinamon

$ sudo apt-get install ibus ibus-hangul
$ im-config
   실행 후 ibus를 입력기로 설정하여 빠져 나옴
$ gsettings set org.freedesktop.ibus.general.hotkey triggers "['Hangul', '<Shift>space', '<Control>space']"


ibus 한글 이슈


우분투 14.04에서 유니티 데스크탑과 gnome-shell을 같이 설치해서 사용할 경우 위의 ibus 한영키 설정 방법을 사용하면 충돌이 생기므로 해당 환경에 로그인 한 후 위의 방법을 재적용해야만 한영 전환이 됨에 유의해야 한다. 이외에도 ibus는 아래와 같은 이슈들이 남아 있다.

  • 단일 한영 전환 키인 한영키(<Hangul> 키)를 UI에서 Keyborard Shortcut으로 사용할 수 없음
  • 리눅스 데스크 탑 별로 단일화된 한영키 입력 UI 필요
  • ibus 한영키 시그널이 별도의 입력 환경이 있는 Virtual Box 등에 제대로 전파되지 않음
  • Mint 17 환경에서 구글 크롬 사용시  <Space> 키 오류 발생: uim은 정상임
  • Qt5.2+ 기반의 애플리케이션에서 한글 입력시 오류 발생: Qt5-ibus 패치 적용 예정
        https://bugreports.qt-project.org/browse/QTBUG-40541
        https://code.google.com/p/ibus/issues/detail?id=1726