2015/10/04
OS X El Capitan의 Rootless 정책과 Disk Utility에 대하여
이전 글에서 OS X El Capitan Upgrade 후 발생한 문제들에 대해 얘기했는데, 이전 OS X 버전의 Recovery 파티션 두 개를 지워 보려고 하다가 생긴 문제들에 대해서 주로 Disk Utility 사용자 관점에서 정리해 본다. 기본적으로 Disk Utility를 가지고 Recovery 파티션을 지울 수 없었기 때문이다. 이전 글에서도 잠깐 언급했듯이 OS X El Capitan의 새로운 보안 정책인 Rootless(또는 SIP; System Integrity Protection) 때문에 Disk Utility에도 제약이 가해질 수 밖에 없으리란 것은 어느 정도 이해할 수 있지만 본연의 디스크 관리 기능을 제대로 할 수 없다는 것에 대해 왕짜증난다.
Rootless 보안 정책은, 간단히는 root 권한으로도 System의 중요한 설정이나 폴더/파일 들을 건드리지 못한다고 이해하면 되지만, 세부적으로는 매우 복잡한 것 같다. 3rd Party 시스템 관련 앱 개발 회사나 개발자들, 그리고 OS X 서버 사용자들에게는 꽤 부담을 줄 듯하다. 일단, 구글링을 통해 알게된 몇 가지만 정리한다.
Rootless 또는 SIP에 대하여...
Rootless는 com.apple.rootless라는 확장 파일 속성으로 관리하는 것 같고, NVRAM, 프로세스, 폴더, 파일 레벨에서도 통제할 수 있는 듯 하다. 일단, 파일시스템 Protection이 걸려 있는 폴더 들은 /System, /bin, /sbin, /usr(단, /usr/local은 제외) 등 이다. 이 폴더들은 root도 write 권한이 없다. SIP를 관리하는 새로운 Utility가 csrutil이라는 놈이다. OS X Recovery 파티션으로 부팅했을 때에만 SIP를 해제 또는 사용하도록 설정할 수 있다. 다만, 현재 SIP 설정 상태는 언제든지 아래와 같이 터미널에서 확인 할 수 있다.
$ csrutil status
Recovery 파티션으로 부팅해서 Rootless를 해제하고자 한다면 disable, 다시 설정하고자 한다면 enable, 초기 상태(enabled)로 reset하고자 할 때는 clean 옵션을 아래의 예와 같이 주면 된다.
$ csrutil disable
이렇게 Rootless 설정을 바꾸면 재부팅해야 효력이 발생한다고 경고 메시지가 뜬다.
위의 예와 같이 Rootless를 해제하고 OS X로 부팅해서 상태를 확인하면 아래와 같이 뜬다.
$ csrutil status
System Integrity Protection status: disabled.
Configuration:
Apple Internal: disabled
Kext Signing: disabled
Filesystem Protections: disabled
Debugging Restrictions: disabled
DTrace Restrictions: disabled
NVRAM Protections: disabled
위의 각 disabled 된 놈들을 개별적으로 활성화할 수도 있는데, 잘 모르고 사용하면 위험하니까 모르는게 낫겠다 싶다.
Disk Utility의 문제 들
우선, Disk Utility UI가 완전히 바뀌었는데 뭐 Apple 입장에서는 나름 사용자가 쉽게 사용할 수 있도록 바꾸었단다. 파티션을 Pie Chart 모양으로 보여 주는데 보기는 좋으나 마우스 클릭할 공간이 줄어 들었다. GPT 파티션이 기본적으로 128개까지 파티션을 사용할 수 있는데 파티션 수를 20개 이상 사용하는 사용자가 있다면 왕짜증 곱배기가 될 것이다.
기능적으로도 아예 삭제된 기능들이 있는데, Rootless를 도입하면서 삭제된 권한 복구(permissions repair) 기능 외에도, DVD나 RAID 지원 기능이 아예 사라졌다. 사라진 기능들로 인한 불만도 가득하더라.
내가 Disk Utility를 사용하면서 왕짜증나는 문제 들은 또 다른 것들이다. 그것은 본연의 디스크 관리를 할 수 있는 방법이 없다는 것이다.
기본적으로, 전체 파티션을 볼 수 있는 방법이 없다. 물론, 내가 El Capitan에 아직 적응이 안돼서 못찾은 것일 수도 있지만 기존의 방법들이 무용지물이다. 즉, 아래의 터미널 명령으로 Disk Utiltity에서 Debug 메뉴가 생겨서 Hidden Partition까지도 볼 수 있었는데 El Capitan에서는 UI가 바뀌면서 사라진 듯 하다. 기본적으로 보이지 않는 파티션은 ESP(EFI System Partition)와 OS X Recovery Partition이다.
$ defaults write com.apple.DiskUtility DUDebugMenuEnabled 1
위의 화면에서 오른 쪽 Bar Chart를 보면 다른 OS 파티션들이 같이 포함되어 있다. 얼핏 보면 모든 파티션이 다 보이는 듯 하지만 ESP나 Recovery Partition은 아예 없다. 위 쪽의 Partition 명령을 Click하면 Pie Chart가 나타나는데 여기서도 당연히 나타나지 않는다. 참고로, 두 번째와 세 번째 untitled로 표시된 650MB 파티션 두 개는 이전 버전의 OS X Recovery Partiton인데 Mac 부팅시에 안보이도록 gdisk로 파티션 type을 임의로 설정한 것이다. El Capitan의 Recovery Partition이 Mac OS X 파티션 다음에 보여야 하는데 안보이고 맨 첫번째의 ESP 파티션도 안보인다. gdisk에서 Mac OS X 파티션 type은 Apple HFS/HFS+(AF00)이고, OS X Recovery 파티션 type은 Apple boot(AB00)이다. 실제로 3개의 복구 파티션 tyoe code를 gdisk에서 AB00으로 바꾸면 새로운 Disk Utility에서는 3개 파티션이 모두 사라진다. 대신 3개 버전의 OS X Recovery 모드로 각각 부팅할 수는 있다.
그리고, 더 큰 문제는 파티션을 삭제하려면 왼쪽의 Tree 메뉴를 사용해야 하는데 여기에는 기본 OS X 파티션과 Windows 파티션 밖에 보이지 않는다. 리눅스 파티션을 Disk Utility로 지우지 못할 이유가 무엇일까? 이것도 강화된 보안 정책의 일환인가? Windows는 만만해서 파티션을 지울 수 있는 건가? 또한, ESP와 OS X Recovery Partition은 Disk Utility에서 아예 안보이니까 당연히 삭제는 물론이고 아무 것도 할 수 없다.
또 한 가지 문제는 불필요한 Recovery Partition을 삭제하면서 알게된 문제인데 위의 Hidden Partition이 보이지 않음으로 인해 파생되는 문제이다. OS X Upgrade시에 Mac OS X 파티션을 끝에서부터 650MB 정도를 잘라서 Recovery Partition을 새로 추가한다. 나처럼 Mac OS X 파티션이 넉넉하고 3번 Upgrade했다면 3개의 Recovery Partition이 추가된다. 가장 최근에 추가된 놈이 Mac OS X 파티션 바로 옆에 위치하게 된다. 나머지 두 개는 지워도 되는 놈인데 Mac OS X 파티션과 합칠 수는 없다. 중간에 최신 Recovery 파티션이 위치하고 있기 때문이다. 방법은 모든 Recovery 파티션을 삭제하고 새로 최신 Recovery 파티션을 생성해야 하는데 El Capitan에서 가능한지는 더 조사해 보아야 한다. 아무튼, 문제점을 설명하려고 좀 장황해 졌는데, 우분투에서 gdisk를 이용해서 두 개의 Recovery 파티션을 삭제하고 다시 OS X에서 Disk Utility의 Partition 메뉴에서 [-]로 두 개의 빈 파티션을 삭제해 보았다. 중간에 최신의 Recovery 파티션이 El Capitan의 Disk Utility에서 보이지 않음으로 인해 Mac OS X 파티션에 두 개의 파티션이 제대로 합쳐진 것(merge)처럼 보인다. 실제로는 두 개의 파티션이 최신 Recovery 파티션에 합쳐져 있었다.
이 밖에도, OS X Upgrade 시에 OS X 데이터 파티션의 파일 시스템 타입이 hfs인데도 인식하지 못하고 Microsoft Basic Partition으로 바꿔 버린 것과, Rootless를 한번 해제하기 전에는 Disk Utility에서 보여주는 전체 파티션이 Recovery Mode로 부팅했을 때와 OS X로 부팅했을 때 차이가 생겼던 문제도 있었다.
맺음말
OS X El Capitan의 Disk Utility는 여러가지 기능이 삭제되어 불편할 뿐만 아니라, 본연의 디스크 관리 기능을 모두 수행할 수도 없고, 사용자가 의도한 대로 동작하지 않을 수도 있다는 점을 알아 둘 필요가 있겠다.
El Capitan에서 강화된 보안 정책인 Rootless에 대해서도, OS X 고급 사용자나 관리자 입장에서는 어차피 Recovery Mode에서는 모든 root 권한을 여전히 사용할 수 있다는 점에서, 근본적으로 필요한 것이었는지 의구심이 든다. 보안 강화라는 명목으로 3rd Party들을 Apple이 통제하려는 의도일 수도 있다는 생각이 든다.
Apple이 System Integrity에는 그렇게 신경을 쓰면서 Application Integrity에는 소홀해진 느낌~!!!
2015/10/02
OS X El Capitan 설치 후 Ubuntu Grub 복구
새로운 OS가 나오면 무작정 설치하는 안좋은 습관이 있다. 이로 인해 발생하는 문제들도 참 다양하다. 남들보다 먼저 문제를 겪으면 구글링해도 답을 찾기 어려운 경우가 많다. 아무튼 Mac OS X El Capitan Upgrade가 떴길래 걍 설치했다. 우분투로 부팅이 안되는 경우는 이번이 처음은 아니다.
El Capitan Upgrade 후 발생한 문제들
<Option> Key를 눌렀을때 Grub으로 부팅할 수 있도록 해 놓은 것이 작동 안하는 것은 그러려니 한다. 그런데, 하드디스크의 Grub은 물론이고, 전에 만들어 놓은 우분투 설치 USB로도 부팅이 안된다. Windows 10과 새로운 OS X 10.11로만 부팅이 된다. 또, 한가지 문제가 더 생겼는데 OS X 데이터 파티션이 안잡힌다. OS X의 터미널에서 파티션을 확인해 보니 파티션들은 잘 있다.
$ diskutil list
그런데, 가만히 보니 OS X Recovery 파티션이 하나 더 생겼다. 이전 복구 파티션들을 안지웠더니 Recovery 파티션만 3개가 되었다. 문제는 리눅스 파티션이 뒤쪽에 있기 때문에 복구 파티션 하나가 새로 생김으로 인해 파티션 번호가 하나씩 밀려 버린다는 것이다. 당장 예상되는 문제가 Grub 메뉴엔트리의 파티션 번호가 달라지기 때문에 Grub이 당연히 동작하지 않으리란 것이다. 예전에는 리눅스의 /etc/fstab에서도 파티션 번호를 사용했었는데 요즘은 각 디바이스 파티션의 UUID를 사용하기 때문에 리눅스 파일시스템이 mount 되지 않는 문제는 없다.
구세주 rEFInd Boot Manager
아무튼 이 모든 문제를 해결하기 위해서는 어떻게든 우분투로 부팅할 수 있어야 한다. OS X를 새로 Upgrade하면 보통은 rEFInd를 새로 설치해 주면 우분투로 부팅할 수 있다. 그런데, El Capitan에서는 Rootless Mode 라는 새로운 보안 정책이 추가되면서 rEFInd를 설치해도 부트 엔트리에 rEFInd가 추가되지 않는 듯 하다. Rootless Mode라는 것이 얼핏 구글링 한 바로는 root 권한으로도 맘대로 시스템 파일들을 건드리지 못하도록 한단다. OS X Recovery 파티션으로 부팅해서 해제하면 된다는데 아직 모르는 게 많아서 꺼려진다. 쉬운 방법을 선택하기로 했다. rEFInd를 기본 boot loader로 만들어 버리는 것이다.
참고로, rEFInd는 OS가 부팅하기 이전에 부팅하므로 OS dependency가 없다. 어떤 OS 환경이든지 binary 파일들이 같다는 얘기다. 다만, rEFInd 0.8.4 미만 버전의 경우 OS X에서 설치하면 기본 설치 위치가 OS X 파티션이었는데 이후의 버전들은 OS에 상관없이 ESP(EFI System Partition) 파티션에 설치된다. OS X Yosemite 이후 OS X 파티션에서는 rEFInd로 부팅할 수 없단다. 또 한가지 참고할 사항은 rEFInd를 만든 이가 바로 gdisk의 저자라는 것이다.
아래와 같이 ESP를 마운트 한 후, 기본 boot loader인 bootx64.efi 파일을 refind_x64.efi로써 대체한다. 당연히 rEFInd가 설치되어 있어야 한다.
$ sudo mkdir /mnt
$ sudo mount -t msdos /dev/disk0s1 /mnt
$ cd /mnt/EFI/Boot
$ cp -f ../refind/refind_x64.efi ./bootx64.efi
이제 OS X를 재부팅 한 후 <Option> Key를 누르고 있으면 EFI 부트 엔트리가 보이는데 이 놈을 선택하면 rEFInd가 뜨고 다시 부트 엔트리들이 나타난다. 여기서 grubx64.efi를 선택해 봐야 파티션 넘버가 달라져서 우분투로 부팅할 수 없다. rEFInd는 계속 Upgrade되고 있는데 최신 버전에서는 리눅스 커널로 바로 부팅할 수가 있다. 커널로 부팅하려면 rEFInd 부트 엔트리 중에서 다시 rEFInd를 선택하면 된다. 이렇게 두 번 선택하는 이유는 처음에는 기본 부트로더가 된 rEFInd로 부팅한 것이지만 설정 파일(refind.conf)을 읽지 못하기 때문에 ESP 파티션의 boot loader들만 보여주기 때문이다.
최근에 사용했던 리눅스 커널을 선택하니 우분투로 깔끔하게 부팅이 된다.
Ubuntu에서 Grub 복구
우분투로 정상 부팅했으니 아래의 명령만으로도 Grub이 복구될 줄 알았다.
$ sudo update-grub
$ sudo reboot
위의 명령으로 최소한 /boot/grub/grub.cfg의 부트 엔트리들에 있는 파티션 넘버는 교정이 된다. 그런데, 우분투로 부팅이 안된다. 아래와 같이 오류 발생...
Error: unknown filesystem.
grub rescue>
----------------------------------------------------------------------------------------------------------------
참고: grub rescue> 모드에서 우분투로 부팅하기
아래와 같이 grub rescue 모드에서 우분투의 boot 파티션을 알아 낼 수 있다.
grub rescue> ls
(hd0) (hd1) (hd1,gpt1) (hd1,gpt2) ......
grub rescue> ls (hd1,gpt9)/
/boot ......
위와 같이 /boot 폴더가 보이는 파티션이 리눅스 boot 파티션이다. 이제 아래와 같이 하면 Grub으로 부팅할 수 있다.
grub rescue> set prefix='(hd1,gpt9)/boot/grub'
grub rescue> insmod normal
grub rescue> normal
----------------------------------------------------------------------------------------------------------------
이렇게 해서 Grub으로 부팅한 후,
$ sudo apt-get install --reinstall grub-efi
$ sudo update-grub
$ sudo reboot
다시 부팅했으나 역시 매한가지다. grub rescue>....
grub-efi 패키지를 재설치해도 해결이 안되는 걸 보니 혹시 무슨 cache 파일같은 찌꺼기 때문일지도 모른다는 생각이 들어서 우분투로 재부팅한 후,
$ sudo apt-get install grub
하니, grub-efi 패키지를 지우고 db를 갱신하겠냐고 물어본다. 패키지만 설치된 상태에서 Ctrl-c로 빠져 나왔다. 그리고 다시 grub-efi 패키지 설치...
$ sudo apt-get install grub-efi
$ sudo reboot
이렇게 하니까 예전의 우분투 Grub으로 완전히 복구되었다.
그런데, 돌이켜 보면 이전에 정리했던 UEFI Grub 복구 절차만 충실히 따라 했어도 복구되었을지 모른다는 생각이 든다. 위의 내용과 비교해서 빠진 부분이 grub-install 명령 실행 부분인데 이 명령을 사용하지 않았던 이유는 "efibootmgr -v" 명령으로 확인시 우분투 boot entry가 멀쩡히 살아 있었기 때문이다. grub-efi 패키지를 새로 설치하면 grub-install 명령이 자동으로 수행된다. grub-install 명령이 NVRAM에 우분투 boot entry를 등록해 주는 일 외에 파티션 변경에 따른 설정을 추가로 해줄 수도 있기 때문이다.
OS X 데이터 파티션 복구
이제 우분투가 정상이 되었으니 나머지 문제들은 쉽게 처리할 수 있다. OS X 데이터 파티션은 gdisk에서 확인해 보니 Microsoft Basic Data(0700) 파티션으로 파티션 코드가 설정되어 있었다. 이 놈은 Apple HFS/HFS+(AF00) 이었던 놈이다. 코드를 바꿔주고 OS X로 재부팅했더니 데이터 파티션이 제대로 복구되었다.
gdisk에 대한 다른 글 들에서 언급한 바 있지만 서로 다른 OS의 파티션 Tool들을 혼용해서 사용할 경우에는 반드시 gdisk로 파티션 테이블에 변화가 생겼는지 확인해 볼 필요가 있다. Recovery 파티션을 OS X Upgrade시 추가하면서 파티션에 변화가 생긴 것인데 OS X 파티션 조차 몰라 보다니... :-(
각종 부팅 설정 원상 복구
일단 rEFInd도 최신 버전으로 재설치했고, Mac 부팅시 <Option> Key를 눌렀을 때 Grub이 뜨도록 다시 설정하였다. 그리고 부팅 순서도 우분투 Grub으로 먼저 부팅하도록 efibootmgr로 재설정 하였다.
남은 일
(2015/10/06 Update)
우분투 설치 USB로 부팅이 안됐던 이유는 USB에서 gdisk로 Hybrid MBR 파티션을 만들면서 EFI Protective Partition(0xEE)의 위치를 맨 앞이 아니라, 맨 뒤로 바꿨기 때문이었다. 이 상태에서는 Hybrid MBR 파티션 들 중 첫번째 FAT 파일시스템을 ESP로 인식해 버리더라. 이전 우분투 설치 USB 만들기 방법에 문제가 있었던 것은 아니었다.
Grub이 이상해졌네...
그런데, 우분투 15.04 설치 후 Grub이 몇번 update 됐는데 그 때문인지 아니면 El Capitan Upgrade 후에 뭔가 바뀐 것인지 잘 모르겠는데, /dev/sda인 하드디스크를 Grub에서 hd0가 아니라 hd1으로 인식하고 있더라... USB를 꽂은 채로 Grub 부팅시 다시 확인해 보면 USB는 hd0로 인식하고, 하드디스크는 hd2로 인식한다. 그런데, /boot/grub/grub.cfg 파일의 부트 메뉴엔트리에는 하드디스크 hint가 hd0로 되어 있어도 UUID를 먼저 참고하기 때문에 하드디스크로 부팅하는데 문제가 생기지는 않는다. 다만, 하드디스크의 우분투 설치 iso파일로 부팅할 때는 grub.cfg에서 hd0가 hd1으로 바뀌어야만 부팅이 된다. 이 때는 hint가 아니고 정확한 위치를 지정하고 있기 때문이다.
아무튼, Grub이 update 되면서 벌레가 생긴 것인지, 아니면 첫번째 하드디스크를 hd0에서 hd1으로 하기로 한건지, 또는 OS X El Capitan 때문에 발생한 문제인지는 확실하지 않다.
2015/04/25
Ubuntu 15.04 적극 추천
어제 글(어제 밤에 12시를 넘기는 바람에 날짜는 이 글과 동일함)에서 우분투 15.04를 권장하지 않는 분위기로 글을 올렸는데 VirtualBox가 아니고 iMac에 설치해서 잠깐 사용해 본 결과 우분투 15.04를 적극 추천하지 않을 수 없게 입장이 바뀌었기에 이 글을 별도로 작성한다. 적어도 Intel-Mac 사용자들에게는 강력 추천하고 싶다. 기능이 추가된 것보다는 안정성이 상당히 강화된 것에 높은 점수를 주고 싶다. 우분투 14.04 LTS 보다 더 안정된 느낌이다.
원래는 VirtualBox에만 설치하고 메인 머신은 우분투 14.10으로 1년 정도 더 버텨볼 생각이었다. 그런데, 가상머신 환경이라 느려서 그렇지 뭔가 상당히 안정된 느낌을 주었기에 메인 머신에서 테스트해 봐야겠다는 생각이 들어서 15.04로 하드디스크의 우분투 설치 iso를 이용하여 Clean Install 하였다.
Nvidia 드라이버 안정성
우선, Nvidia 드라이버가 상당히 안정화 되었다. Nouveau 드라이버도 상당히 개선된 것 같고, 우분투 15.04에서 기본으로 제공하는 Nvidia proprietary driver도 346.59 버전으로 거의 최신 버전이다.
일단 14.10버전까지 오픈 소스 Nouveau 드라이버는 Qt Creator에서 QML 등 OpenGL을 사용하는 애플리케이션에서 화면 잔상이 생겨서 거의 사용할 수 없었는데 깔끔하게 동작한다. 다만, Virtual Box 우분투 guest 머신에서 3D 가속을 사용할 경우 시스템이 죽는 문제가 발생했다. 이는 이전 버전에서도 흔히 생겼던 문제이고 우분투 문제라기 보다는 Virtual Box 문제인 경우가 많았다. Windows guest는 그럭저럭 잘 돌아간다. 3D 가속만 끄고 사용하면 우분투 게스트도 좀 느리긴 하지만 별 문제는 없다.
우분투 14.10까지는 Nvidia proprietary 드라이버를 Nvidia 홈페이지에서 다운 받아 사용해야 했다. 우분투에 기본 탑재된 드라이버를 사용할 경우 공포의 black screen 문제가 발생했었다. 이제는 기본 탑재된 드라이버를 사용하면 된다는 것이 특히, Intel-Mac 사용자들에게는 기쁜 일이다. 또 한가지 Mac 사용자들에게 반가운 점은 화면 밝기 조절을 매 부팅시마다 해 주었어야 했는데 밝기 변경 상태가 재부팅 후에도 잘 유지된다
System 안정성
우분투 14.10 사용시에는 부팅시마다 colord-sane 데몬 등 crash가 끊이질 않았는데 crash가 없어지니 뭔가로 부터 해방되어 편안한 느낌이 든다. 몇일 더 써 봐야 확실해지긴 하겠지만 우분투를 사용하면서 이렇게 안정된 느낌을 받아 본적이 없을 정도다.
우분투 14.10 설치 후 재부팅시 iMac에서 우분투로 부팅할 수 없었던 문제도 사라졌다. EFI 설정이 잘 보존된다. 다만, 우분투 15.04를 설치한 후 EFI Multi-OS 사용시 부팅 순서를 우분투가 1순위가 되도록 조정한다. 이것은 어쩌면 OS 입장에서 당연한 것인지도 모른다. 방금 설치한 OS로 부팅하도록 할 필요가 있기 때문에... 아무튼 부팅 순서는 우분투로 부팅하고 나서 이전 글의 efibootmgr 사용법을 참고하여 바꿔주면 그만이다.
WIFI 안정성
iMac에서는 우분투에 기본 탑재된 Broadcom proprietary driver를 사용하면 되는데 수동으로 설치해 주어야 하는 문제는 아직 남아있다. 몇일 더 써보아야 확인이 되긴 하겠지만 WIFI도 개선이 된듯하다. 무선공유기에 가끔씩 연결이 안되는 문제가 사라졌고 네트워크 속도도 상당히 빨라진 느낌이다. 오늘이 주말이라 그럴 수도 있기 때문에 좀더 지켜봐야 한다. 참고로, 유선 네트워크 드라이버를 언급하지 않는 이유는 예전부터 별 문제가 없었기 때문이다.
아직 하루도 안써 보고 안정성을 얘기하는 것이 때 이르긴 하지만 문제가 발생하면 이후에 다시 글을 수정할 생각이다.
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
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 파일을 생성하여 아래의 내용을 추가해야 한다.
4. Boot Options 메뉴에 OS 별 Icon 이미지 보이기<?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>
이제 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 파티션
아래에 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)