레이블이 usb인 게시물을 표시합니다. 모든 게시물 표시
레이블이 usb인 게시물을 표시합니다. 모든 게시물 표시

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 파티션을 사용한다.

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 명령이 제대로 동작하기 위해서 반드시 필요하다.

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도 만들 수 있다.