2019/04/24

Grub rEFInd chainloading


Mac PC를 사용하고 있지만 정작 macOS는 늘 방치해 왔는데 iPhone 파일들을 정리하려다 보니 macOS만 한게 없기 때문에 다시 macOS를 돌보기로 했다. 중간에 Recovery 파티션을 삭제했었는데 그 후로 OS를 Upgrade해도 다시는 Recovery 파티션을 생성해 주지 않더라. Recovery Partiton이 없는 상태에서 macOS에 문제가 생겨도 인터넷으로 macOS를 쉽게 설치할 수 있는 것은 Mac의 큰 장점 중 하나이다. 예전에 갖고 놀다가 날려서 어쩔 수 없이 High Sierra를 인터넷으로 설치한 채 방치해왔다. iMessage 동기화가 잘 안돼서 OS Upgrade를 했는데 10.13.4까지만 되고 10.13.6 버전은 설치하다가 파티션을 건드리면 Windows로 부팅할 수 없다는 메시지를 뿌리고는 Upgrade 할 수 없는 상황이 돼 버렸다. 기왕 이렇게 된거 Recovery Partiton도 만들겸 따끈 따끈한 Mojave(10.14.4)로 clean install을 하기로 했다.

모하비(Mojave) Clean 설치 후 ......

새로 설치하려면 8GB 이상의 USB가 필요한데 USB 외장하드를 사용해도 된다. 참고로 외장하드에 macOS의 DiskUtility로 GPT 파티션을 생성하면 200MiB의 EFI System Partition(ESP)을 기본으로 생성하더라. 아무튼, Mac OS 확장(저널링) 파티션(hfs+)을 추가해서 설치 이미지를 복사하면 재 부팅 후 <Option>(= <Alt>) 키를 사용해서 외장하드로 부팅해서 모하비를 설치할 수 있다. 그런데 High Sierra 이후에 macOS 기본 파일시스템이 hfs+에서 apfs로 바뀐 것이 생각나서 인터넷을 뒤져보니 High Sierra에서는 SSD일 때만 hfs+를 apfs(Apple File System)로 자동 변환했는데 모하비 버전부터는 HDD도 무조건 apfs가 기본이 되었단다. 그래서 설치 전에 기존의 hfs+ 파티션을 삭제하고 apfs 파티션을 새로 생성해서 모하비를 설치했다. 모하비 설치 방법은 인터넷에서 쉽게 찾을 수 있기 때문에 따로 정리할 필요는 없어 보인다. 참고로, 나처럼 Mac/iPhone에서 backup 파일이 5GB가 안될 경우에는 iCloud를 사용하면 엄청 편하다. 모든 것을 iCloud에 올려 놓고 icloud.com에서 Backup이 잘됐는지 확인하고 나서 macOS를 설치하면 설치 후에 모든 것이 예전처럼 복원된다. 물론 5GB이상인 경우에도 애플에 추가 비용을 지불하면 된다.

설치 후 재 부팅하면 macOS로 기본 부팅이 되기 때문에 우분투로 부팅하려면 부팅시에 Option키를 눌러서 EFI 아이콘을 선택해야 한다. 그런데, Recovery Partition으로 부팅할 수 있는 icon이 안보인다. 설치가 안됐는지 확인하기 위해 모하비로 부팅 후에 터미널에서,

$ diskutil list

해 보니 APFS container 밑에 분명히 Recovery Partition이 보인다. 혹시나 해서 부팅 시에 <Command>(= <Super> = <Windows>) + <R> 키를 사용했더니 Recovery Partition으로 부팅이 잘 된다.

흠, 이번에는 우분투로 부팅해서 NVRAM 부팅 설정이 비뀐게 있는지 확인하기 위해,

$ efibootmgr -v

로 확인해 보니 부팅 순서를 포함해서 바뀐 것이 없었다. 이게 약간 의아스러운 점인데 기존에 Grub으로 먼저 부팅하도록 설정된 상태이기 때문이다. 아마 macOS를 upgrade 하면서 firmware 설정도 바뀌었기 때문으로 추정된다. 우분투로 먼저 부팅하도록 기존의 순서대로 다시 아래와 같이 해 주고 재 부팅해 보았다.

$ sudo efibootmgr -o 0000,0001,0080

우분투 Grub으로 부팅이 잘 된다. 이번에는 우분투 Grub에 추가했던 macOS 메뉴 엔트리로 부팅해 보았다. 부팅이 안될 것으로 예상했는데 역시나 안된다. apfs 파일 시스템이 나온지 얼마 안돼서 Grub에 apfs module이 없기 때문이다. 리눅스에서 apfs 파일 시스템 지원 부분은 좀 시간이 걸리겠지만 조만간에 문제가 해결되리라 예상한다. 다행히, apfs 파일시스템은 apfs-fuse를 사용하면 리눅스에서 Read-only로 mount해서 사용할 수 있더라. 다만, Grub에서 macOS로 부팅할 수 있는 수단은 추가해야 한다. rEFInd를 Grub에서 chainloading 해 주면 문제가 해결된다.

Grub에서 rEFInd chainloading

사실, rEFInd만을 사용해도 macOS, 우분투, Windows를 모두 부팅할 수 있기 때문에 현재 apfs 모듈이 지원이 되지 않는 상황에서는 Grub을 사용하는 것이 최선은 아니다. macOS를 사용하지 않는 환경에서도 rEFInd를 기본으로 사용하는 사용자들도 많다. 하지만, OS 별 Upgrade가 원활히 동작하도록 하기 위해서는 모든 기본 설정이 정상 동작하도록 하는게 좋다. 더구나 boot manager/loader 들이 서로 chainloading이 되도록 해 주면 부팅 환경이 매우 쾌적해지고, 혹시나 어느 놈이 망가져도 다른 놈으로 부팅해서 문제를 해결할 수 있게 된다.

아무튼 최신 rEFInd-bin-0.11.4.zip 파일을 다운로드 받아서 압축해제 후 설치 폴더에서,

$ sudo refind-install

하면 우분투 또는 macOS에서 rEFInd가 ESP 파티션에 설치되고, rEFInd가 default boot loader가 된다. default boot loader라는 의미는 부팅 시에 별 다른 키를 누르지 않으면 rEFInd로 부팅한다는 의미이다. 즉, Grub을 대체해 버린다. 뭐 이렇게 사용하는 것이 더 편할 수도 있지만, 개인적으로 우분투 사용자 관점에서는 Grub이 Default가 되도록 하는 게 낫다고 본다.

Grub이 default boot loader가 되도록 하려면, efibootmgr -v 명령으로 ubuntu(Grub) boot entry를 확인 한 후, efibootmgr -o 명령으로 ubuntu가 맨 앞에 오도록 부팅 순서를 바꾸면 된다. 이 경우에 rEFInd Grub 부팅 메뉴 엔트리를 아래와 같이 만들어서 우분투의 /etc/grub.d/40_custom 파일에 추가해 주고 나서,

menuentry "rEFInd" {
    search --file --no-floppy --set=root /EFI/refind/refind_x64.efi
    chainloader (${root})/EFI/refind/refind_x64.efi
}

$ sudo update-grub

한 후에 재 부팅해서 Grub에서 rEFInd 메뉴를 선택해서 사용할 수 있게 된다.

참고: macOS에서 rEFInd 설치

기존에 rEFInd를 사용해 왔는데 macOS를 upgrade했거나 clean install 했다면 파티션 정보가 바뀌기 때문에 rEFInd를 다시 설치해야 한다. 그리고, 버전마다 버그 개선 사항이 있기 때문에 가능한 최신 버전을 사용하는 것이 좋다. 이는 우분투를 사용하지 않는 일반 macOS 사용자들에게도 일반적으로 적용된다. 또한, macOS에서 apfs 파일 시스템을 채택했기 때문에 rEFInd 최신 버전에서는 기본적으로 ESP 파티션에만 설치된다. 즉, 이후로는 macOS에서 rEFInd를 설치하든 우분투에서 rEFInd를 설치하든 큰 차이가 없다는 뜻이다. 단, 최근의 macOS에서 rEFInd를 설치하려면 반드시 Recovery 파티션으로 부팅해서 터미널에서,

$ csrutil disable

명령으로 SIP 모드 사용해제하고 나서 다시 Recovery 파티션으로 부팅한 후에야 rEFInd를 설치할 수 있다.

$ refind-install
$ csrutil enable

명령으로 SIP 모드를 다시 사용하도록 해준 후 재 부팅하면 된다.

참고: Mac에서 <Option> 키 사용시 rEFInd 사용

우분투를 사용할 경우 이 방법을 권하고 싶지는 않다. Mac PC에서 부팅 시 <Option> 키를 눌렀을 때 macOS Icon과 EFI Boot Icon 두 개가 나타나는데 EFI Boot Icon은 EFI 기본(fallback) boot loader로 부팅하도록 해 준다. 즉, ESP 파티션의 /EFI/Boot/bootx64.efi 파일로 부팅한다. 이 파일을 원하는 boot loader/manager로 교체해도 된다는 뜻이다. /EFI/refind/refind_x64.efi 파일을 /EFI/Boot/bootx64.efi로 복사해서 사용하면 <Option> 키를 사용해서 부팅시 rEFInd를 선택할 수 있다. 다만, 이렇게 하면 text mode의 rEFInd가 뜬다. /EFI/refind 폴더 내의 파일들을 /EFI/Boot 폴더에 복사해 주면 OS 별 Icon들을 사용할 수 있을지도...

참고로, 우분투를 설치하거나 Grub package가 update 되면 /EFI/Boot/bootx64.efi 파일에 /EFI/ubuntu/shimx64.efi 파일을 복사해 놓는다. 언제부터인지 우분투에서 Secure Boot를 사용하지 않는 경우에도 grubx64.efi 파일 대신 shimx64.efi 파일을 사용하고 있더라. 문제는 최신 rEFInd에 버그가 있어서 shimx64.efi로 부팅할 수 있는 방법이 없다. 무조건 우분투는 grubx64.efi 또는 raw kernel만 선택할 수 있다. 문제는 Grub chainloading이 안된다는 것이다.

우분투에서 macOS apfs 파일 시스템 사용

참고로, 이전의 Mac extended 파일 시스템(hfs+)은 hfsprogs 패키지만 우분투에 설치해 주면 mount/umount는 물론이고 gparted에서 format도 할 수 있었다. 앞서 리눅스에서 apfs-fuse를 사용하면 macOS의 apfs 파일 시스템을 사용할 수 있다고 했는데 git 사이트의 설치 방법을 따라가면 된다. 다만, 우분투 19.04에서 제대로 컴파일 하려면 아래 두 개의 패키지를 추가로 설치해 주면 된다.

$ sudo apt install zlib1g-dev libfuse3-dev

컴파일 후에 build 폴더에서 binary 파일만 /usr/local/bin에 복사해 두면 편리하다.

$ sudo fdisk -l /dev/sda

명령으로 macOS apfs 파티션을 확인하고 나서,

$ sudo apfs-fuse -o allow_other /dev/sda2 /mnt

와 같이 mount 하고,

$ sudo umount /mnt

와 같이 unmount 할 수 있다. mount는 read-only로만 할 수 있기 때문에 apfs 파일 시스템을 리눅스에서 망가뜨릴 염려는 안해도 될 것이다.

참고로, apfs는 btrfs와 매우 유사한 파일 시스템이다. Copy on write 방식을 사용하기 때문에 큰 파일 복제시 매우 빠르다. 또한, snapshot, 압축, encryption 등이 지원되는 것도 btrfs와 유사하다. SSD에서는 파일 Block들이 연달아 있지 않아도 되기 때문에 성능이 무척 좋다. HDD인 경우에는 자동 defragmentation 방식을 사용함으로써 성능문제를 해결하고 있다. btrfs는 Oracle과 SUSE 리눅스가 적극적으로 채택하고 있지만 Redhat이 포기한 후로 다른 리눅스 벤더들이 적극적으로 채택하고 있지는 않다. MS가 NTFS를 대체하려던 ReFS도 유사한 파일 시스템인데 그리 성공적이진 않은 모양이다. apfs는 아예 hfs+를 대체하는 것이니까 애플이 심혈을 기울일 수 밖에 없을 것이다. apfs가 잘 정착한다면 리눅스에서 btrfs도 보편화되리라 본다. 반대로, 어쩌면 btrfs가 나름 잘 정착했기 때문에 애플이 apfs를 채택한 것인지도 모른다.

2019/04/19

Ubuntu 19.04 Upgrade


어제 우분투 19.04 Disco Dingo가 공식 출시됐다. 방금 국내 미러 사이트를 이용해서 18.10에서 19.04로 Upgrade 했다. 패키지 다운로드 시간이 1분 정도 걸렸고 전체 Upgrade 시간은 45분 정도 걸렸다. 18.10이후 크게 바뀐 것이 없기에 이 글이 특별히 의미가 있는 것도 아니다. 다만, 18.04 이전 사용자들이라면 18.10 이후 적용된 Yaru 테마 덕분에 우분투가 크게 바뀐 듯이 느껴질 것이다.

우분투 19.04의 새로운 점들

언제나 자세한 사항은 Release Note를 참고하는 것이 좋다.

  • 성능 향상 : 우분투 18.10 이후 Gnome Shell에 대한 메모리 누수 방지와 성능 향상 노력이 19.04버전까지 이어졌다.
  • Gnome Shell 3.32 탑재: 새로운 nautilus를 탑재 하면서 Desktop에 Icon을 끌어다 놓는 기능이 사라졌다. 대신 Desktop Icons Extension을 사용해서 이 기능을 대체했는데 File Drag & Drop은 안된다. Upgrade 후에 바탕화면에 휴지통과 Home Folder icon이 나타나는데 Desktop Icons Extension을 사용한 것이다. 텅빈 Desktop을 선호한다면 Gnome Tweaks Tool을 이용해서 Desktop Icons Extension 설정에서 이 두 개의 icon을 안보이도록 할 수 있다.
    • 이외에도 gnome-terminal 등에 소소한 기능들이 추가됐다.
    • 야간 모드 설정을 미세하게 조정할 수 있다.
    • naultilus에서 Starred(별표)를 이용해 즐겨찾기 파일을 추가할 수 있다.
    • Yaru Icon 들이 새로 추가됐다.
  • Linux Kernel 5.0 탑재: AMD Radeon이나 Rasberry Pi 등 새로운 H/W 지원과 함께 절전 기능과 보안 기능 등이 강화됐다.
  • Toolchain Updates:  gcc 8.3/optional gcc 9, python 3.7.3 등과 함께 cross-compiler 들이 개선됐다.
  • Fractional Scaling 지원: HiDPI 디스플레이의 Wayland 및 Xorg session에서 화면 확대 기능을 지원한다.
  • S/W Updates: Firefox 66, LibreOffice 6.22 등이 탑재됐고, Tracker가 기본 설치되어 최근 사용 파일들을 쉽게 찾을 수 있도록 했다.
  • Grub Safe graphics mode 옵션: Grub 메뉴에 nomodeset이 설정된 메뉴가 추가됐다는데 upgrade해서 그런지 안보이더라.
  • 기타: Network Manager로써 IWD가 wpa supplicant를 대체하기 위해 탑재됨

Upgrade 후 발생한 소소한 문제들

일단 Upgrade 후에 Firefox를 띄워서 인터넷에 접속했는데 화면 스크롤이 느려졌다는 느낌이 들었다. 확인해 보니 Nvidia driver가 Loading 되어 있지 않았다. 그런데 nouveau 모듈도 로딩되어 있지 않았다. 이게 정상적인 Upgrade case인지는 확실하지 않다. 또한, Nvidia 드라이버 문제때문에 /etc/gdm3/custom.conf 파일에서 Wayland를 사용하지 않도록 한 상태에서 upgrade했기 때문에 발생한 문제인지는 잘 모르겠다. 혹시나 해서 Wayland를 사용하도록 설정한 후 재부팅했더니 아예 부팅하다가 gdm을 못 띄우고 먹통이 돼 버렸다. 아무튼 이 부분은 우분투의 버그임에 틀림없다. 다시 부팅해도 먹통이 되었기 때문에 복구 모드로 부팅해서 다시 Wayland를 사용하지 않도록 설정한 후 재부팅하니까 부팅이 되더라.

Cannonical에선 당분간 Wayland를 채택할 의향이 없나 보더라. 10년이 됐는데 안정성 문제가 해결이 안돼서 그럴만도 하겠다 싶다. 아무튼, 우분투 19.04에 기본 탑재된 Nvidia 드라이버를 설치해서 문제가 해결됐다. 좀 나아진 것은 Nvidia 드라이버 설치시 좀 버벅댐이 있었지만 재부팅하지 않고도 설치 후 Nvidia 환경에서 정상 동작한다는 점이다.

Gnome Extensions...

애용하는 Extension이 Hide top bar와 Pixel saver인데 이 중에서 Pixel saver가 항상 문제다. Upgrade 후에 Windows Title이 사라지지 않는다. 다행히 좀 찾아 봤더니 대용으로 쓸만한 놈이 있었다. Unite라는 놈인데 Pixel saver보다 훨씬 맘에 든다. Ubuntu Dock 대신 Dash to panel을 사용할 경우에도 잘 동작한다. 참고로, Dash to panel을 사용할 경우엔 Hide top bar 기능이 포함돼 있다.

맺음말

우분투 19.04를 추천한다면 성능 향상/시스템 안정성과 Yaru 테마를 꼽을 수 있을 것이다. 우분투는 이미 충분히 성숙한 OS이기 때문에 버전 Upgrade가 그다지 흥미로운 일도 아닌 것이 되어 버렸다. Windows 10을 같이 사용하기는 하지만 우분투가 훨 낫다는 것이 개인적인 생각이다.