2015/10/28
Ubuntu 15.10 Upgrade
지난 주에 우분투 15.10이 나왔는데 주말에 15.04였던 놈을 Software Updater를 사용해서 15.10으로 Upgrade했다. 대개는 Clean Install을 했었는데 우분투 홈페이지에서 15.10의 새로워진 점을 보았더니 크게 사용자가 느낄 정도로 달라진 점은 없어 보였기 때문이다. 대략 1시간 반 정도 걸렸다. 우분투 15.10에 대한 새로운 기능들은 여기를 참고하면 더 도움이 된다.
대체로 이번 Upgrade는 15.04의 버그 Fix 및 gcc를 비롯한 주요 패키지들이 버전 업 됐다는 것에 만족해야 할 듯 하다. 15.10이라는 버전에 걸맞지 않는다는 의견들도 상당히 있더라. 몇일 써본 봐로도 겉보기에 15.04와 크게 달라진 점은 별로 없어 보인다.
하지만, 우분투를 새로 설치하려는 이들에게는 굳이 우분투 14.04.3 LTS 버전을 설치하기 보다는 많이 안정화됐고 systemd와 같은 새로운 환경에 빨리 적응할 수 있도록 우분투 15.10을 적극 추천하는 바이다.
우분투 15.10 Desktop에서 새로워진 점
Linux kernel 4.2가 탑재되었다. 최신 AMD Radeon GPU 사용자들에겐 희소식일 수 있다. kernel 4.0 이후에 도입된 kernel live patching 기능은 배포판 사용자 들에겐 그리 큰 의미가 있는 것은 아니었다. 어차피 커널 보안 패치는 배포판 서버에서 제공하는 것을 받아야 하니까. 서버 사용자이면서 중요한 커널패치를 실시간으로 적용하고자 할 때는 도움이 된다. 이외에도 Intel Broxton 등 새로운 드라이버들이 새 커널에 많이 포함되었단다.
Unity 7.3.2 데스크탑에서는 주로 Dash쪽 기능들이 개선됐는데 눈에 띄는 부분은 Dash에서 검색한 App을 바탕화면이나 Unity Launcher에 Drag & Drop으로 끌어다 놓을 수 있는 점이다. 그리고, Gnome 3.16에 기반하여 Unity가 동작하는데 대표적으로 Scrollbar가 Gnome Overlay Scrollbar로 바뀌었다. 사실 Unity Scrollbar는 별로 편하다고 생각되진 않았고 굳이 그런데 공들일 필요가 있나 싶겠다는 생각도 있었는데, Canonical이 Upstart를 버린 것처럼 포기할 건 과감히 포기하는 모습은 좋아 보인다. 좀 아쉬운 점은 Gnome 3.16의 패키지들이 모두 Ubuntu 15.10에 Update되진 않았다. 대표적으로 gedit나, Nautilus 파일 관리자가 그것들이다.
이외에도, 개발자들을 위한 Ubuntu Make(umake)가 Android 개발 환경을 비롯해서 다양한 platform과 framework 들을 통합 지원한단다. 우분투에서 Game을 즐기는 이들에게는 Steam Controller가 제공된다는 점도 희소식이 될 것이다. 또한, Persistent Network Interface Name이 도입되어서 eth0 같은 네트워크 인터페이스명 대신 다소 복잡하면서도 영구적인 명칭을 갖게 되었다. 다만, 나처럼 Upgrade한 경우에는 eth0를 그대로 사용하는 듯 하다. VirtualBox에 설치해 보았더니 enp0s3라는 인터페이스가 생겼다. 아래 명령으로 확인할 수 있다.
$ ifconfig
이 밖에, 배경화면을 포함해서, gcc 5.2.1, Firefox 41.0.2, Libre Office 5.0.2.2 등등 수 많은 패키지가 Update 되었다.
한글 패키지와 다솜(dasom) 입력기에 대한 바램
한글 관련 패키지는 언제나처럼 [System Settings] > [Language Support]를 선택하면 설치되는데 fcitx가 기본 패키지로 포함되어 있어서 ibus 대신 쉽게 바꿔 사용할 수 있다. 최근에 우분투 한국 커뮤니티에 다솜 입력기를 정식 출시했던데, 다음 우분투 버전에는 다솜 입력기도 한글 패키지에 포함됐으면 하는 바램이다. ibus나 fcitx 한글 관련 설정은 우분투 14.10 이후의 방법들을 사용하면 되므로 다시 언급하지는 않겠다.
참고로, 다솜 입력기에서는 한글 마지막 입력 후 마우스 이동시 한글이 따라 다니는 끝 글자 버그를 해결했단다. 고생하신 개발자 분께 감사드린다. 한편으로는, 다른 한글 입력기들의 고질적인 유지보수 문제를 해결하기 위해서 더 많은 사람들이 관심과 참여를 가질 수 있기를 바라고, 혼자서 프로젝트를 끌고 가려고 하지말고 나같은 노친네들보다는 후배들이 많이 참여할 수 있도록 해 주시길 바란다. Mir나 Wayland로 X-Window 환경이 바뀌게 되면 또 다른 노력이 필요할 것이고 미래에도 새로운 기술 환경에 적응해서 살아 남아야 하기 때문이다.
우분투 15.10 Upgrade 후 생긴 자잘한 문제들
우분투 15.10으로 Upgrade하고 나서 우분투로 부팅하면 Unity 로그인 화면이 나타나야 하는데 공포의 black screen이 나타났다. 다시 전원을 끄고 부팅했더니 제대로 나타났다가 또 부팅하면 다시 black screen이다. 그런데, Volume을 좀 키웠더니 다행히 black screen 문제는 공포의 black screen 증상은 아니었다. 우분투 부팅시 북 두드리는 소리가 들렸기 때문이다. <Ctrl><Alt><F2> 눌렀다가 <Alt><F7>을 눌렀더니 로그인 화면이 나타났다. 혹시나 해서 ~/.cache 폴더를 지우고 lightdm을 다시 설치했더니 이 문제가 해결된 듯 했는데 재발하더라. [System Settings] > [Software & Updates] > [Additional Drivers] Tab에서 Nouveau 드라이버를 선택했다가 재부팅 후 다시 Nvidia 드라이버를 선택하고 재부팅했더니 더이상 재발하지 않는다.
이 외에 VirtualBox 5.0.8이 죽는 문제가 있었는데 한번만 생기고 더이상 발생하지는 않고 있다. 그리고 chrome이나 chromium 기동시 기본 브라우저로 설정할지를 계속 물어 보는데 더 이상 묻지 않기를 click하면 된다.
기타 참고 사항
우분투 15.10부터 바뀐 것인지 아니면 chrome/chromium에서 제공하는 기능인지 모르겠는데 다운로드시 다운로드 진행상태가 Unity Launcher의 아이콘에 표시된다. firefox는 안된다.
VirtualBox UEFI 모드 Guest 부팅 문제 해결
이전 게시물에서 해결하지 못했던 문제를 해결했는데, 우분투 14.10 이후 버전부터 VirtualBox에서 UEFI 모드로 Guest를 설치하면 가상머신으로 부팅할 수 없었던 문제가 있었다. 15.10에서도 역시 같은 증상이었는데 구글링해 보니 해결 방법이 있었다. UEFI Shell에서 startup.nsh 스크립트 파일이 있으면 이놈을 먼저 실행하는데 여기에 grubx64.efi path를 넣어 주면 UEFI 모드로도 부팅할 수 있다. VirtualBox나 btrfs 파일시스템의 문제는 아니었다. 다만, 우분투 14.04에서는 별다른 설정 없이도 가능했는데 왜 그런지는 모른다. VirtualBox에서 우분투 설치 iso로 부팅한 후 아래와 같이 startup.nsh를 새로운 가상 머신의 EFI System Partition(ESP)의 / 폴더에 생성해 주고 가상머신을 재부팅하면 된다.
$ sudo mount /dev/sda1 /mnt
$ cd /mnt
$ sudo echo '\EFI\ubuntu\grubx64.efi' > startup.nsh
2015/10/07
Grub과 gdisk를 이용한 Windows UEFI/BIOS 설치 USB 만들기
OS X El Capitan으로 Upgrade하면서 우분투 설치 USB가 잘 동작이 안됐던 문제 때문에 USB를 갖고 놀다가 실수로 USB를 지워 버렸다. 우분투 설치 USB를 다시 만드는 김에 Windows 설치 겸용으로도 사용할 수 있도록 Grub과 gdisk를 이용해서 다시 만들었다.
USB 굽기 Tool을 사용하지 않는 방식의 장점은 USB 용량이 커지고 있기 때문에 저장공간을 최대한 활용할 수 있다는 것이다. All-in-one multi-OS 설치 USB 까지는 아니더라도 USB 1개로 BIOS 방식이든 UEFI 방식이든 가리지 않고 우분투와 Windows 설치가 가능하도록 하려는 것이다. 우분투나 OS X에서는 GPT 파티션이든 Hybrid MBR 파티션이든 어떻게 만들어도 상관없는데 이전 글에서 다룬 바와 같이 Windows는 GPT 파티션에 대한 제약 사항이 많다. 이 때문에 우분투를 비롯한 리눅스는 여러개 배포판 또는 버전을 1개의 USB에 iso 파일로 담으면 되지만, Windows는 1개의 버전만 가능하다. 엄밀히 말하면, 아래의 Windows USB 제약사항 들 때문에 Grub2를 사용할 경우 Windows 1개 버전에 대해서는 UEFI/BIOS 설치가 가능하고 2개의 BIOS용 Windows 버전을 추가할 수는 있다.
Grub2를 이용한 Windows 설치 USB 만들 때의 제약사항
- 우분투처럼 Windows 설치 iso 파일을 이용하여 직접 부팅할 수는 없다. Windows 설치 파티션에 Windows 설치 iso의 내용물을 모두 복사해야 한다. 뭐 syslinux/isolinux로 가능할 수도 있단다. 다만, 이 경우 3~4GB의 Windows 설치 파일을 모두 메모리에 로딩하기 때문에 메모리 제약사항이 생긴단다.
- Windows 설치 파일들은 USB 상에서는 반드시 첫번째 파티션에 있어야 하고 FAT 파일시스템을 사용해야 한다. 하드디스크는 상관없는데 USB는 Windows에서 저장장치로 쳐주지 않는다. 단, BIOS 모드로 Windows 설치시에는 Grub2의 drivemap 기능을 사용할 수 있으므로 다른 파티션에 있어도 된다. Grub2의 drivemap은 UEFI 모드에서는 사용할 수 없더라.
- BIOS 모드로 Windows 설치시에는 GPT 파티션을 인식하지 못한다. 이 때문에 Hybrid MBR 파티션을 사용해야하고 EFI Protetive 파티션을 제외한 나머지 3개의 MBR 파티션을 사용할 수는 있다.
- Hybrid MBR 파티션을 사용하는 USB는 Windows 설치시에는 문제가 없지만, Windows에서 사용하고자 할 때에는 제약사항이 생긴다. EFI 모드의 Windows는 그나마 GPT 파티션들을 인식할 수 있지만 BIOS 모드의 Windows는 USB 파티션들을 아예 인식하지 못할 수 있다.
gdisk를 이용한 USB 파티션 만들기
위의 Windows USB 제약 사항을 고려하여 아래와 같이 gdisk로 파티션을 나누었다. 당연히, 빈 USB에서 작업해야 하고, GPT 파티션 Table을 먼저 만들어야 한다.
$ sudo gdisk /dev/sdb
[sudo] password for aaa: GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: hybrid BSD: not present APM: not present GPT: present Found valid GPT with hybrid MBR; using GPT. Command (? for help): p Disk /dev/sdb: 31703040 sectors, 15.1 GiB Logical sector size: 512 bytes Disk identifier (GUID): 9D794CCE-5719-43A0-A5A7-D8DFBE8488D3 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 31703006 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name 1 2048 8390655 4.0 GiB 0700 UWRoot 2 8390656 8800255 200.0 MiB EF00 UESP 3 8800256 8802303 1024.0 KiB EF02 BIOS boot partition 4 8802304 17190911 4.0 GiB 0700 UWData 5 17190912 31703006 6.9 GiB 8300 ULData Command (? for help): x Expert command (? for help): o Disk size is 31703040 sectors (15.1 GiB) MBR disk identifier: 0x01AEFD5F MBR partitions: Number Boot Start Sector End Sector Status Code 1 * 2048 8390655 primary 0x07 2 8390656 8800255 primary 0xEF 3 8802304 17190911 primary 0x07 4 1 2047 primary 0xEE Expert command (? for help):
위의 내용은 이미 만들어진 USB 파티션을 보여 준 것인데 이것을 참고하여 파티션을 만들면 된다. 먼저 gpt 파티션들을 만들고 파티션 Tpye code를 위와 같이 지정해 준다. 5개의 gpt 파티션을 만들었는데 필수 파티션은 앞의 1~3의 3개 파티션이다. 1번 파티션이 Windows 설치 파티션(4GB)이고, 2번은 ESP(EFI System Partiton; 200MB), 3번은 Grub BIOS Boot Partition(1MB)이다. 1번이 반드시 Windows 설치 파티션이어야 하기 때문에, ESP로 2번 파티션을 사용하고 있다. 참고로 4번은 Windows Data용 파티션이고 5번은 리눅스 설치 iso들을 집어 넣기 위한 파티션이다.
파티션을 나누고 나서 gparted를 이용하여 파일시스템을 만들어 준다. 1과 2번은 fat32로 format 해야 하고, 3번은 포맷할 필요 없다. 4번은 fat32, 5번은 ext4로 포맷하였다.
gparted로 포맷하고 나서, 다시 gdisk로 Hybrid MBR 파티션을 만들어 주어야 한다. 참고로, gparted로 포맷한 후 gdisk에서 확인해 보니 Hybrid MBR 파티션이 만들어져 있었다. 하지만, 이것을 사용하면 안되고, 위의 마지막 4개의 파티션과 같이 gdisk에서 gpt 1, 2, 4번 파티션을 Hybrid MBR 파티션으로 새로 만든다. 위에 만들어진 Hybrid 파티션을 보면 4번이 EFI Protective 파티션이 되었음에 주의할 필요가 있다.
결과적으로, 아래와 같이 파일시스템이 만들어졌다. parted/gparted에서는 Hybrid MBR 파티션 정보를 볼 수 없다.
$ sudo parted /dev/sdb print
Model: USB Flash Disk (scsi) Disk /dev/sdb: 16.2GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: pmbr_boot Number Start End Size File system Name Flags 1 1049kB 4296MB 4295MB fat32 UWRoot msftdata 2 4296MB 4506MB 210MB fat32 UESP boot, esp 3 4506MB 4507MB 1049kB BIOS boot partition bios_grub 4 4507MB 8802MB 4295MB fat32 UWData msftdata 5 8802MB 16.2GB 7430MB ext4 ULData
USB에 UEFI 및 BIOS Grub 설치
UEFI Grub은 파일만 복사하면 되므로 아무 리눅스에서나 작업이 가능하지만, BIOS Grub을 설치하려면 BIOS 모드로 부팅한 리눅스에서 작업해야 한다. BIOS 모드로 설치된 리눅스가 없다면 Virtual Box로 하나 만들어 두는게 좋다.
UEFI Grub 파일들을 우분투 12.04.2 이후의 64bit 우분투 설치 iso에서 USB ESP 파티션(2번)에 아래와 같이 복사한다.
$ sudo mkdir /tmp/mnt
$ sudo mount ~/Downloads/ubuntu-15.04-desktop-amd64.iso /tmp/mnt
$ sudo mount /dev/sdb2 /mnt
$ sudo cp -R /tmp/mnt/EFI /mnt
$ sudo cp -R /tmp/mnt/boot /mnt
BIOS Grub은 아래와 같이하면, 2번 파티션 외에 USB의 MBR Boot Sector와 3번 Grub BIOS Boot Partition에 설치 된다.
$ sudo grub-install --recheck --boot-directory=/mnt/boot /dev/sdb
우분투 설치 iso 파일들을 USB에 복사
우분투 설치용으로도 USB를 사용할 것이기 때문에 우분투 설치 iso들을 아래와 같이 5번 ext4 파티션에 복사하였다.
$ sudo umount /mnt
$ sudo mount /dev/sdb5 /mnt
$ sudo mkdir /mnt/boot-isos
$ sudo cp ~/Downloads/ubuntu-15.04-desktop-amd64.iso /mnt/boot-isos
$ sudo cp ~/Downloads/ubuntu-15.04-desktop-i386.iso /mnt/boot-isos
$ sudo sync
Windows 설치 파일 복사
USB 1번 파티션에 Windows 설치 iso 이미지 파일 내의 모든 폴더/파일 들을 복사한다.
$ sudo umount /mnt
$ sudo mount /dev/sdb1 /mnt
$ sudo umount /tmp/mnt
$ sudo mount ~/Downloads/windows.iso /tmp/mnt
$ sudo cp -R /tmp/mnt/* /mnt
$ sudo sync
Grub Boot Menuentry 설정
아래의 Grub 부트 엔트리를 USB 2번 ESP 파티션의 /boot/grub/grub.cfg에 추가한다. 원래의 grub.cfg 파일을 지우고 새로 만드는 편이 좋다.
$ sudo umount /mnt
$ sudo mount /dev/sdb2 /mnt
$ sudo rm -f /mnt/boot/grub/grub.cfg
$ sudo nano /mnt/boot/grub/grub.cfg
$ cat /mnt/boot/grub/grub.cfg
menuentry "[USB] Ubuntu 64-bit Install" { set isofile="/boot-isos/ubuntu-15.04-desktop-amd64.iso" loopback loop (hd0,5)/$isofile linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject initrd (loop)/casper/initrd.lz } menuentry "[USB] Ubuntu 32-bit Install" { set isofile="/boot-isos/ubuntu-15.04-desktop-i386.iso" loopback loop (hd0,5)/$isofile linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile noprompt noeject initrd (loop)/casper/initrd.lz } menuentry "[USB] UEFI Mode Windows 8+ Install" { insmod part_gpt insmod fat set root='(hd0,gpt1)' chainloader (${root})/efi/boot/bootx64.efi } menuentry "[USB] BIOS Mode Windows Install" { insmod part_gpt insmod fat set root='(hd0,gpt1)' drivemap -s (hd0) ${root} ntldr (${root})/bootmgr }
참고로 마지막 "[USB] BIOS Mode Windows Install" 메뉴에서 drivemap은 불필요 하지만, BIOS 모드의 Windows 설치 파티션이 USB의 첫번째 파티션이 아닐때 사용할 수 있다.
Windows 버전에 대한 고려 사항
위의 Grub 부트 엔트리 들 중 "[USB] UEFI Mode Windows 8+ Install" 메뉴엔트리는 Windows 8 이후 버전 들에만 적용된다. Windows 설치 iso 파일에 /efi/boot/bootx64.efi 파일이 추가됐기 때문이다.
Windows에서 UEFI를 지원하기 시작한 것은 Windows Vista 이후이고 64bit 버전에만 적용된다. Windows Vista에서 현재의 Windows 10까지 모든 Windows 버전에서 UEFI Windows Boot Manager로 사용될 수 있는 파일이 있는데 bootmgfw.efi라는 파일이다. 이 파일은 Windows 설치 iso 이미지 안에 포함된 /sources 폴더에 install.wim 파일 안에 포함되어 있다. 이미 다른 PC에 설치된 Windows가 있다면, C:\Windows\Boot\EFI\bootmgfw.efi 파일을 사용해도 된다.
가령, UEFI 모드로 Windows 7을 설치하고자 할 때에는, bootmgfw.efi 파일을 현재 폴더에 복사해 놓았다면 아래와 같이 USB의 Windows 설치 파티션에 /efi/boot/bootx64.efi 파일로 복사해 주면 된다.
$ sudo umount /mnt
$ sudo mount /dev/sdb1 /mnt
$ sudo mkdir /mnt/efi/boot
$ sudo cp ./bootmgfw.efi /mnt/efi/boot/bootx64.efi
설치 USB Test
PC BIOS/Firmware 설정이 UEFI냐 BIOS/CSM 모드냐에 따라 Grub 메뉴에서 UEFI Mode인지 BIOS Mode인지를 확인해서 맞는 놈을 선택해서 부팅해야 한다. 우분투 메뉴는 UEFI/BIOS를 따로 구분하지 않는다. 해당 모드의 Grub이 자동으로 부팅시에 결정되기 때문이다.
Mac PC에서 USB 부팅시 참고사항
Mac에서는 USB를 꽂고 부팅시 <Option> Key를 누르고 있으면 USB Icon으로 부팅 가능한 옵션이 추가되어 표시되는데, 아이콘 밑에 Windows로 표시된 놈은 Windows 부팅 옵션이 아니고, BIOS 모드로 부팅하기 위한 옵션이다. 이 글대로 설치 USB를 만들면 Windows로 표시된 아이콘 외에 EFI Boot로 표시된 아이콘이 두 개가 보인다. 하나는 EFI 모드의 Windows 설치 파티션으로 부팅하고, 하나는 EFI 모드의 Grub으로 부팅되는데 어느 놈이 어느 놈인지 구분할 수 없다. rEFInd에서는 구분이 가능하다. 또한, Windows로 표시된 아이콘을 선택하면 BIOS 모드의 Grub으로 부팅된다.
즉, Mac은 BIOS/Firmware 설정이 따로 없는 대신에 UEFI와 BIOS/CSM 부팅을 동시에 지원한다. Boot Camp가 이 BIOS/CSM 모드를 이용하는 것이고 BIOS/CSM 모드에서는 Hybrid MBR 파티션을 사용한다.
2015/08/02
Windows 10 Clean Install
Windows 10을 Clean Install 해 보았다. Windows 7 Home Edition을 사용하던 낡은 PC에서 Windows 8 Pro 버전을 Upgrade promotion 기간에 저가에 샀는데 Upgrade했다가 다시 Windows 7으로 재설치해서 방치하고 있는 license key가 있었는데 낡은 PC를 버리게 돼서 우분투가 설치된 다른 PC에 Windows를 설치하는 김에 따끈따끈한 Windows 10을 설치하기로 했다.
구글링해 보니 Windows 8을 clean install 하고 registry를 수정하면 Windows 8 Upgrade 버전의 license key로 정품인증이 가능하단다. 또, Windows 7이나 8은 설치 후 최신 update를 모두 해 주어야 Windows 10으로 upgrade가 가능하단다. 그런데 Windows 8.1은 바로 Windows 10으로 upgrade 할 수 있단다.
Windows 10 license 정책 변화
추가적으로, Windows 10의 라이센스 정책이 하나의 license를 하나의 특정 기기(main board 기준)에 영구히 종속시키는 정책으로 바뀐 듯 하다. 이는 이전 Windows에서 1개의 license key를 갖고 있으면 아무 PC에나 1개의 Windows를 설치할 수 있었던 license 정책을 바꾼것이다.
이 정책의 좋은 점(?)은, Windows 7, 8, 8.1 이 정품 인증된 PC에서 먼저 Windows 10으로 upgrade한 후에는 같은 기계에서 라이센스 키를 재입력하지 않아도 Windows 10을 영원히 재설치 할 수 있다는 것이다. 이는 특정 PC의 main board 정보와 그 PC에 설치된 Windows license key를 Microsoft사의 서버에서 지속적으로 관리하겠다는 의도인것 같다.
나쁜 점은, 기존에 Windows license가 없는 경우에는 Windows 10 license key를 재구매 하면 되는데, 한번 특정 PC에 설치하면 다른 PC에서는 이 license key를 사용할 수 없게 되는 것이다. 아마도 이것이 기존 Windows 사용자들에게 Windows 10 upgrade를 무료로 제공하는 가장 큰 이유일 듯 싶다. PC가 망가지면 무조건 Windows를 새로 구입해야 하니까...
중장기적으로 이 정책이 Microsoft에게 더 많은 이익을 줄 것임이 분명하다. 그니까 사용자입장에서는 Window 8.1까지 정품 구매한 Windows는 보물로 간직하라는...?
Windows 10 Clean Install 설치 절차
Windows 10을 Clean Install 하기 위해서는 반드시 한번은 기존의 Windows 7~8.1을 Windows 10으로 먼저 Upgrade해 주어야 한단다. M$가 공짜로 Windows 10을 제공하는데 그 정도 노가다야 니들이 해야하지 않겠냐고 생각할지도... 아무튼 Windows 10을 clean install 하기 위해서는 아래와 같이 엄청난 노가다와 소모 시간이 나를 기다리고 있다. 정말 큰맘 먹지 않으면 clean install은 포기하라는...
0. Backup
항상 OS를 Clean Install 하기 전에 중요한 Data를 Backup해 두어야 한다. 더구나 OS 파티션은 삭제하거나 최소한 새로 format 할 것이기 때문이다.
1. Windows 8.1 Clean Install 후 정품 인증
Windows 8.1 Pro 설치 iso를 내려 받아서 rufus로 USB에 구워서 clean install 했다. 그런데, Windows 8/8.1은 Windows 7이나 Windows 8 Upgrade license key로는 설치할 수 없으므로 여기 게시물을 참고해서 ei.cfg 파일을 만들어 설치 USB에 넣어 줌으로써 설치시 license key 입력창이 뜨지 않도록 해 줄 필요가 있다. 다행히도 Windows 8.1 설치 후 license key를 입력했더니 정품인증이 바로 되더라. Registry는 건드리지도 않았는데 말이다.
2. Windows 10으로 Upgrade
Windows 8.1 제어판에서 Windows update를 사용하면 바로 Windows 10 Upgrade가 뜨더라. Windows 10 iso를 먼저 내려 받아서 USB에 구워서 Upgrade 할 수도 있다는데 그냥 제어판에서 Upgrade했다. 내려받는 속도가 빠른 편이라 문제 없었다. 다만, 기존의 Windows 8.1을 backup하는 등의 일을 처리하는 때문인지 Windows 10으로 upgrade 완료하기까지 시간을 정확히 측정하지는 못했는데 1~2시간 걸린듯. 첨에는 내려 받기가 끝나고 나서 설치 준비중이라고 메시지가 뜬 후 한참동안 작업 진행 표시가 없어서 먹통이 됐나부다 했는데 구글링해 보니 원래 시간이 오래 걸리는 것이었다. Upgrade 완료 후 Windows 10이 정품인증 됐음을 확인했다.
Windows 8/8.1에서는 Windows OS 파티션 앞에 Microsoft Reserved Partition을 추가하는데, Windows 10 upgrade 후에는 Windows OS 파티션 끝에 파티션이 하나 더 추가 된다. 아마도 backup 용 인듯...
3. Windows 10 Clean Install
위의 Upgrade 중에 Windows 10 Pro iso(기존 Windows license와 일치하는 Windows 10 버전)를 다시 내려 받아서 USB에 구우면 된다. 설치시에 라이센스 키 입력하는 것은 모두 건너 뛰면 된다. Windows 8/8.1 설치와는 달리 license key를 입력하지 않아도 Windows 10은 설치할 수 있다. 설치 시간은 Windows 8.1 설치시간과 비슷하다. 대략 30분... 설치 후 정품인증이 됐나 확인해 보니 자동으로 정품인증이 되어 있다.
Windows 10 Clean Install 후에는 Microsoft Reserved Partition 1개만 생성되는데 Windows 8/8.1에서 128MiB 였는데 16MiB로 용량이 줄었다.
4. 기존 Windows Software 모두 재설치
자주 쓰던 프로그램들을 모두 재설치 해야만 한다. 걍 천천히 할 생각이다. Windows 10이 기존 Windows 들에 비해 좀 빠릿빠릿 해졌다는 것으로 위안을 삼으면서....
Ubuntu Grub 복구
늘 그랬듯이 Windows를 설치하고 나면 우분투 grub을 복구해야만 다시 우분투로 부팅할 수 있다. 참고로 Ubuntu와 Windows 모두 UEFI 모드로 설치했다. 복구 방법은 이전 글 "Ubuntu BIOS 및 UEFI Grub 복구"를 참고하면 된다. Windows 10 설치 후 우분투 설치 USB에서 UEFI Grub 복구방법이 불완전했기에 이전 글을 수정하였다.
설치 후 소감
아직 Windows 10을 제대로 써보지 않아서 노가다 후 피로감에 빠져 있다. 시작 메뉴 회귀와 함께 우분투 Unity의 검색기능과 동일하게 Task Bar에 앱/파일/키워드 검색 기능이 들어 간것은 인상적이다. Windows 8에도 앱 검색기능이 있었는데 키워드 검색이 잘 안돼서 그닥 쓸모 없어 보였는데 Task Bar에 붙여 놓고 키워드 검색도 되니 한결 쓸모 있어 보인다.
리눅스 사용자들에게는 식상한 가상 작업공간도 새로운 기능인데 나름 빠릿빠릿 동작한다. 이외에도 Cloud 관련 기능들이 눈에 띈다. OneDrive나 OneNote가 그것들이다.
아무튼 기존 Windows 사용자들에게 Windows Clean Install을 권하고 싶지는 않다. 엄청난 노가다와 시간을 허비할 만큼의 가치가 있는 일인지는 잘 모르겠다. 1 PC당 1 license라는 Windows license 정책 변화도 사용자들에게 risk가 있다. PC가 망가지면 새로 license를 구매해야 한다.
결과적으로 우분투를 더욱 더 사랑하게 될 것 같은 느낌이 든다.
Labels:
grub,
install,
ubuntu,
uefi,
windows 10
2015/03/01
Ubuntu 14.10 fdisk와 gdisk
Ubuntu 14.10의 fdisk에서 GPT 파티션 지원 시작
우분투 14.10부터 fdisk에서 GPT 파티션도 지원하기 시작했다는 것을 우연히 발견했다. 당연히 fdisk는 DOS(MBR) 파티션에 사용하고 GPT 파티션 작업에는 gdisk(GPT fdisk라고도 함)를 사용해 왔기 때문이다. 아래에 새로운 fdisk와 gdisk 메뉴 스크린 샷을 첨부한다.
gdisk가 fdisk로 완전히 통합될지는 모르겠지만 아직은 gdisk에 너무 익숙해서 fdisk를 쓰고 싶은 마음이 생기지는 않는다. 여기서는 gdisk의 몇가지 팁들을 남겨두고자 한다.
gdisk를 이용한 파티션 테이블 정보 관리
아래 화면과 같이 GPT 파티션 Table 정보와 Protected MBR 파티션 정보를 gdisk로 관리할 수 있다. Multi-OS 환경에서 이 정보들은 잘 Backup 해둘 필요가 있다. Linux는 Gparted/parted, Windows는 Disk Manager/diskpart, Mac OS X는 Disk Utility와 같이 OS 별로 저마다의 Disk 관리 Tool 들이 있는데, 이 들이 디스크 파티션 변경시 저마다의 방법으로 파티션 Table 정보를 변경해 버리기 때문이다.
가령, Mac OS X의 Disk Utility로 Disk의 마지막 파티션을 미할당 상태로 남겨 두고 리눅스에서 Gparted로 fat32 파티션을 새로 할당하면 Protected MBR 파티션 정보가 Hybrid-MBR 파티션 정보로 바뀐다. 이 상태에서 Windows로 부팅하면 자동 복구 모드로 넘어 가는데 복구하면 파티션이 완전히 망가지는 경험을 하게된다. 한가지 경험담을 더 예로 들면, Windows에서 fat32 파티션을 지웠다가 다시 생성했더니 Mac OS X로 부팅할 수 없는 문제가 발생했다. 이런 일이 어느 날 갑자기 생기면 Mac OS X의 문제라고 생각하고 OS 재설치를 시도하게 된다. 그러나 재설치를 해도 재부팅 후 Mac OS X로 부팅할 수 없게 된다. Mac OS X의 Disk Utility로 verify 해 보면 파티션 오류가 발생하고 복구할 수는 없다. 나중에 알고보니 Mac OS X 파티션 Type 정보가 "Apple HFS/HFS+"였는데 "Microsoft basic data" Type으로 바뀌어서 발생한 문제였다.
gdisk는 파티션 테이블 원본을 Binary 파일로 Backup했다가 문제가 생겼을 때 복구하거나, 아니면 파티션 정보를 텍스트 파일로 저장했다가 나중에 수작업으로 파티션 정보를 일일이 복구할 수 있도록 해준다. 위의 경험담은 어쩌면 지극히 일부의 문제 사례일 것으로 추정된다. 즉, Multi-OS 환경에서 특정 OS의 디스크 관리 툴을 가지고 파티션 추가/삭제/변경 작업시 파티션 테이블의 어떤 정보가 동시에 변경될지 예측하기 어렵다. 특정 OS로 갑자기 부팅이 안되는 문제가 발생하면 gdisk로 파티션 테이블 변경 사항이 있는지를 가장 먼저 확인하는 것이 좋다. 파티션 테이블만 복구하면 대부분의 문제가 해결된다.
gdisk 활용 팁
파티션 Type이 변경된 경우, gdisk의 l(list known partition types) 명령으로 파티션 Type code를 알아낸 후 t(change a partition's type code) 명령으로 해당 파티션의 code를 변경해 주면 된다.
리눅스 GPT 파티션들은 Gparted로 파티션을 새로 만들면 파티션 Type code가 0700(Basic data partition)이 된다. 이 파티션은 Windows로 부팅시 탐색기에서 새로운 드라이브로 보이는데 마우스로 클릭하면 포맷할지 물어본다. 이 자체가 사용자의 실수를 유발할 수 있기 때문에 Windows에서 리눅스 파티션이 아예 보이지 않도록 해 줄 필요가 있다. gdisk에서 Type code를 8300(Linux filesystem)으로 바꿔주면 Windows 탐색기에 더이상 리눅스 파티션이 보이지 않게 된다.
순수 UEFI-GPT Multi-OS 환경에서는 Protected MBR 파티션은 디스크 전체가 하나의 파티션으로 잡혀야 하는데 Hybrid-MBR 파티션 정보로 바뀌면 여러 개의 파티션이 나타나게 된다. 이 때는 gdisk의 x(Expert command), n(create new protective MBR) 명령으로 새로 파티션을 생성해 주면 문제가 해결된다.
참고 사항
Hybrid-MBR 파티션은 Mac OS X의 Boot Camp를 사용해서 Windows를 설치할 때 BIOS 모드를 emulation 해 주기 위해서 사용하는 파티션 방식이다. 즉, Mac OS X 자체는 GPT 파티션을 사용하는데 Windows의 DOS(MBR) 파티션을 지원하기 위해서 짬뽕 파티션을 사용하는 것이다. 그런데, 리눅스의 Gparted도 이 방식을 지원하듯하다. 문제는 이것을 모르고 사용하면 Multi-OS 환경에서 파티션 정보가 엉켜서 특정 OS로 부팅이 안되는 사태가 발생한다는 것이다.
2015/02/28
디스크 두개 사용시 Grub UEFI Booting 설정
두 개 이상의 물리적 디스크와 Multi-OS 환경
하드디스크 용량이 늘어나면서 HDD(Hard Disk Drive)가 하나인 PC들이 주가 되었었는데, SSD(Solid-State Drive)가 범용화 되면서 SSD와 HDD가 동시에 탑재된 PC 사용자들도 늘어나고 있다. 자연스럽게 디스크 성능과 용량이 증가하니까 Multi-OS를 사용하려는 시도가 생기기 마련이다. 대표적으로, UEFI 모드로 Windows 8+이 SSD에 설치된 PC를 구매했는데 우분투를 같이 설치해서 사용하고자 하는 시도가 있을 수 있겠다.
여기서는 SSD와 HDD이든, 또는 HDD가 두 개이든, 물리적으로 분리된 두개의 디스크를 장착한 최근의 UEFI 모드를 사용하는 PC 환경에서 다중 OS를 사용하기 위한 Grub 설정 방법에 대해서 정리한다.
UEFI 환경에서 우분투 설치시 고려할 점
Windows 8+가 첫번째 디스크에 설치되어 있다고 가정할 때 우분투를 두 번째 디스크에 설치하는 것은 그리 어려운 일이 아니다. 우분투 설치 iso를 USB에 굽던지 USB에 저장해서 일반적인 설치 과정을 따라가면 된다. 디스크만 두번째 디스크로 지정하면 된다.
다만, 파티션은 첫번째는 EFI System 파티션(ESP; 200~300MB), 그 다음은 우분투 OS root(/) 파티션(30~50GB), Swap 파티션(RAM과 동일 용량), 사용자 데이터(/home) 파티션(나머지 용량 - 용량이 클 경우 파티션을 몇개로 더 쪼개는 것도 괜찮음) 등의 최소한 4개의 파티션을 사용하는 것이 좋다.
UEFI 모드에서는 GPT 파티션을 사용하는데 기본적으로 128개까지 파티션을 사용할 수 있는 장점이 있기 때문에 파티션을 여러 개로 쪼개서 사용하는 것이 디스크 활용 측면에서 바람직할 수 있다.
여기서, 강조하고 싶은 점은 물리적으로 분리된 디스크 마다 첫번째 파티션은 ESP(EFI System Partition)로 설정해 두는 것이 좋겠다는 것이다. 사실은 ESP는 여러 OS가 공유해서 사용하는 파티션이기 때문에 디스크가 여러 개라고 하더라도 Boot Disk의 ESP 파티션 하나 만을 사용해도 된다. 다만, 디스크마다 ESP 파티션을 두라는 것은 혹시라도 디스크를 다른 PC에 장착할 가능성이 있고 파티션 용량도 얼마 안되기에 나중을 위해서 만들어 두라는 얘기다.
Boot Disk
예전의 IDE Controller 사용시에는 HDD를 두 개이상 사용하려면 Master/Slave 점퍼를 설정해야 했던 적도 있었다. SATA Controller로 넘어 오면서 부터 Master/Slave 구분은 의미가 없게 되었다. BIOS(또는 UEFI Firmware) 설정에서 Boot Disk로 설정한 디스크가 예전의 Master Disk에 해당된다.
가령, Windows가 SSD에 설치되어 있었고 나중에 우분투를 HDD에 설치했더라도 BIOS 설정에서 우분투 HDD로 먼저 부팅하도록 설정했다면 우분투 HDD가 Boot Disk가 된다. 즉, 리눅스에서는 부팅한 첫번째 디스크는 항상 /dev/sda가 되고 두번째 디스크는 /dev/sdb가 된다. Windows에서도 마찬가지로 부팅한 디스크/파티션이 C: 드라이브가 된다. 결국은 어떤 디스크로 부팅하느냐에 따라 디스크가 첫번째냐 두번째냐라는 것이 상대적으로 결정된다는 뜻이다.
Boot Partition
UEFI-GPT 방식에서는 Boot Disk의 ESP 파티션이 Boot Partition이다. 이와는 달리, BIOS-MBR 방식에서는 Boot Disk의 첫번째 sector가 MBR이 저장된 Boot Sector가 되고, 첫번째 파티션이 Boot Partiton이다(단, Linux의 Grub은 첫번째가 아닌 파티션을 Boot Partition으로 지정하여 사용할 수 있음).
참고로, 리눅스의 gparted로 GPT 파티션을 만들면 MBR과의 호환성을 유지하기 위해 디스크의 앞부분 몇 sector를 조금 남겨두고 첫번째 파티션을 만든다. Grub은 BIOS-GPT 방식으로도 동작하는데 Boot Sector 공간이 작기 때문에 이 경우에는 BIOS grub 파티션이라는 1MB 정도의 파티션을 별개로 만들어야 한다.
Windows UEFI Boot Partition
UEFI 모드로 설치된 Windows의 Boot Partition은 당연히 ESP를 사용하고 이 파티션은 나중에 설치한 우분투에서도 ESP로 사용할 수 있다. 그런데, Windows의 경우 GPT 파티션 구조가 여러가지 변형이 있을 수 있다.
즉, PC Vendor들이 제공하는 Recovery Partiton, Windows에서 자체 복구 목적으로 사용하는 Winows Reserved Partion, ESP 등의 3개 파티션이 Windows OS 파티션과는 별개로 존재할 수 있다. GPT 파티션에서 파티션들은 동등하고 GUID로 파티션 Type을 구분하기 때문에 ESP가 반드시 첫번째 파티션일 필요는 없다.
그렇지만, 나중에 Grub에서 Windows가 설치된 디스크의 ESP 파티션 정보를 사용할 것이기 때문에 ESP 파티션이 몇번째 파티션인지 조사해 보아야 한다. 우분투에서 Windows 디스크의 1~3번째 파티션 각각을 하나씩 마운트해서 폴더 구조를 살펴 보는게 가장 확실한 방법이다. 우분투로 부팅했으니 Windows 디스크는 /dev/sdb가 된다. parted를 사용하면 파티션 정보를 알 수 있다.
$ sudo parted /dev/sdb print
$ sudo mount /dev/sdb1 /mnt
$ ls /mnt/EFI/Microsoft/Boot/bootmgfw.efi
위의 ls 명령 결과 botmgfw.efi 파일이 있으면 첫번째 파티션(/dev/sdb1)이 ESP이다.
Ubuntu UEFI Boot Partition
앞서 UEFI-GPT 방식에서는 물리적으로 분리된 디스크의 첫번째 파티션을 ESP로 만들어 두는 것이 좋다고 했고 우분투 설치시에 파티셔닝을 앞서 설명한 바와 같이 했다면 우분투가 사용하는 ESP는 Windows의 ESP와 다른 디스크의 파티션임을 이해할 것이다.
만약, BIOS 설정에서 Windows 디스크로 부팅하도록 설정했다면 Grub을 Windows의 ESP 파티션에 설치해야 한다. 하지만, 여기서는 우분투의 ESP에 Grub을 설치했기 때문에 BIOS 설정에서 우분투 디스크로 부팅하도록 해야 한다.
이제, 우분투 디스크의 ESP 파티션에 설치된 Grub을 이용해서 물리적으로 분리된 Windows 디스크의 Windows boot manager를 구동할 수 있도록 Grub boot menuentry를 만들 것이다. Grub에서 우분투 부팅 설정은 우분투 설치시에 자동으로 등록되기에 신경쓸 필요도 없다.
Grub Windows UEFI Boot Menu
앞서 Winodws의 ESP 파티션 위치를 bootmgfw.efi 파일 위치로 알아낼 수 있다고 했다. 아래 두개의 명령으로 Grub 메뉴엔트리에 사용할 <hints_string>과 <fs_uuid> 정보를 얻는다.
$ sudo grub-probe --target=hints_string /mnt/EFI/Microsoft/Boot/bootmgfw.efi
--hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1$ sudo grub-probe --target=fs_uuid /mnt/EFI/Microsoft/Boot/bootmgfw.efi
ffff-ffff이들 두 명령 결과 값들은 Grub 메뉴엔트리에서 아래와 같이 사용된다.
search --fs-uuid --set=root <hints_string> <fs_uuid>즉, 위의 결과 값들을 사용하여 아래와 같이 Grub menuentry를 만든다.
menuentry "Microsoft Windows Vista/7/8+ UEFI-GPT" { insmod part_gpt insmod fat insmod search_fs_uuid insmod chain search --fs-uuid --set=root --hint-bios=hd1,gpt1 --hint-efi=hd1,gpt1 --hint-baremetal=ahci1,gpt1 ffff-ffff drivemap -s hd0 hd1 chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi }위에서 drivemap은 Windows가 반드시 물리적으로 첫번째 디스크여야만 부팅할 수 있는데 두번째 디스크로 인식하여 부팅할 수 없는 경우에만 사용한다. drivemap을 사용하지 않아도 되는 경우라면 굳이 사용할 필요는 없다.
위의 Grub 메뉴엔트리는 아래와 같이 편집기를 사용하여 /etc/grub.d/40_custom 파일 맨 끝에 삽입하면 된다.
$ sudo nano /etc/grub.d/40_custom
$ sudo update-grub
$ sudo reboot
재 부팅 후 위에 새로 만든 Windows Grub 메뉴를 선택해서 부팅이 잘 되는지 확인해 본다.
UEFI 환경에서 Grub을 이용한 다중 디스크의 Multi-OS Booting
UEFI 환경에서 디스크가 두개 이상인 경우 디스크 별로 서로 다른 OS를 설치해서 사용하면 관리 측면에서 편리하다. 이 경우, 각 디스크 별로 ESP 파티션을 따로 만들어 두는 게 좋고, Grub을 사용할 경우 chainloader를 이용하여 다양한 조합의 부팅 설정이 가능하다. 각각의 ESP 마다 Grub을 설치해서 Grub 자체를 Chainloading 할 수도 있다.
이 글은 두 번째 디스크의 Windows boot manager를 Grub에서 Chainloading 하는 방법에 대해 예를 들었다.
참고 사이트
https://wiki.archlinux.org/index.php/GRUB
Labels:
우분투,
boot loader,
efi,
gpt,
grub,
multi-os,
second hdd,
ubuntu,
uefi
2014/10/31
Mac에 Ubuntu 14.10 설치 후 부팅 이슈
"Ubuntu 14.10 Clean Install"에서 언급했듯이 우분투 14.10 설치 후에 iMac에서 우분투로 부팅할 수 없는 문제가 발생했다. 현재, iMac은 Mac OS X Yosemite, Windows 8, Ubuntu 14.10의 Triple-OS가 EFI mode로 설치 되어 있다. 부팅은 "Apple Mac에서 EFI Multi-OS Booting"에서 다룬 바와 같이 Mac OS X의 boot manager를 사용하도록 설정되어 있다.
우분투 14.10 설치 후 Mac 부팅시 나타나는 증상
일단, 우분투 14.10을 설치하고 나서 부팅하니 부팅 순서가 바뀌었다. Option키를 누르지 않으면 Mac OS X로 부팅하도록 했었는데 Windows로 부팅한다. 아마 UEFI 기본 boot loader(fallback bootloader)를 Windows boot manager로 해 놓아서 그런 것 같다. 나중에 우분투로 부팅해서 확인해 보니, NVRAM 정보가 reset 되어 있었다. 즉, 예전에 우분투의 efibootmgr로 설정했던 부팅 순서 정보도 모두 사라졌다.
또한, 부팅시 Option키를 누르고 우분투를 선택하면 grub> prompt로 떨어지고 거기서 아무 것도 할 수 없는 상태가 된다.
해결 방법
먼저, Windows로 로그인 한 후에 Boot Camp 제어판에서 "Mac OS X로 부팅" 설정 후 재부팅하면 이후부터는 Mac OS X로 부팅한다. 이제, Mac OS X로 재부팅 후, 반드시 우분투 ESP(EFI System Partiton) 파티션의 EFI 폴더를 다시 복사해 주고 grubx64.efi에 대한 boot.efi 하드 링크를 다시 생성해 주어야 부팅시 Option키 눌러서 우분투를 선택하여 부팅할 수 있게 된다. 우분투 14.04에서는 grubx64.efi 대신 shimx64.efi로 boot.efi 하드 링크를 생성해도 부팅이 잘 됐었는데 Bug 때문인지 부팅시 오류가 생긴다.
즉, Mac OS X 터미널에서 아래와 같이 해 주면 된다.
$ sudo mkdir /mnt
$ sudo mount -t msdos /dev/disk0s1 /mnt
$ cd /Volumes/MDATA
$ sudo rm -rf ./EFI/ubuntu/
$ sudo cp -R /mnt/EFI/ubuntu ./EFI/
$ sudo ln -f /Volumes/MDATA/EFI/ubuntu/grubx64.efi /Volumes/MDATA/System/Library/CoreServices/boot.efi
우분투 14.10에서 Security 관련해서 Grub이 뭔가 바뀐 때문인지는 확실하지 않다. 어쨌든, 우분투 재설치할 때 마다 이 작업을 해야하는 불편함이 생겼다. rEFInd를 Mac OS X 파티션에서 사용할 경우에 Mac OS X가 upgrade 될 때마다 rEFInd를 재설치해야 하는 번거로움과 비슷한 일이다.
Mac 사용자 들을 위한 권장 사항
Mac에서 Multi-OS를 사용하는 사용자들은 안전을 위해 boot manager로 rEFInd를 같이 사용하는 것이 좋겠다.
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를 선택할 수 있다.
Labels:
우분투,
boot loader,
efi,
efibootmgr,
esp,
grub,
multi-os,
ubuntu,
uefi
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 파티션
아래에 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로 부팅하여 rEFInd나 rEFIt를 설치하는 것이다. 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/18
Ubuntu UEFI 모드 설치 USB 만들기
제목을 "Ubuntu UEFI 모드 설치 USB 만들기"로 달았지만, 이 글은 사실, "UEFI와 BIOS를 모두 지원하는 우분투 설치 USB 만들기"가 정확할 것이다.
우분투 설치 USB 만들기에 대한 글은 사실 널려 있다. 그리고, 우분투 한국 커뮤니티에도 "Super Grub2 Disk를 이용한 우분투 Live/설치 USB 만들기"를 올린 적이 있다. 따라해 보라고 알려 줘도 당장 설치하고자 하는 마음이 앞서기 때문에 빠른 방법을 찾는 듯하다. 즉, 간단히 Rufus나 UNetbootin, 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 만들기 절차 불필요
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도 만들 수 있다.
피드 구독하기:
글 (Atom)