Ubuntu 설치하기 - Multi Booting

 

1. 동기

1-1. WSL의 한계: Serial Port 인식불가

가상머신을 사용하면서 하드웨어에 접근할 일이 생기면 괜히 두려워진다. 당연히 디스플레이, 스피커나 키보드, 마우스 정도는 문제 없지만 대표적인게 USB 단자다. 한참 가상머신을 사용할 때, 주변기기 연결에 애를 먹었던 기억이 난다. 지금이야 주변기기나 미디어를 잘 인식하지만. 그것보다도 멀티부팅이 되도록 운영체제를 설치하는 법을 알게되고부터는 답답하게 가상머신을 쓰지 않았었다.

용량이 부족해 한동안 Windows만 메인으로 사용하다 WSL을 알게되면서 설치도 간편하고, 윈도우를 사용하며 동시에 사용할 수 있기도 해서 WSL을 애용했다. 그러다 최근에 Arduino, AVR프로그래밍을 시작하면서 문제가 됐다. WSL에서 Serial Port사용이 불가능하더라. 정확히는 WSL1은 지원하지만 WSL2에서 아직 이슈를 해결하지 못한듯 하다. ‘WSL Serial Port’를 검색하면 윈도우에서 인식한 직렬포트는 WSL에서 자동으로 잡는다고 다들 설명해서 당연히 될 거라 생각했는데 다시보니 다 몇년 전 글들이다. WSL2 출시 이후 글 몇 개를 봤더니 WSL2부터 사용이 불가한 상태란다. 이게 무슨 다운그레이드인가 싶었지만 다시 생각해보니 그럴수 있다 싶었다. WSL2로 전환하면서 Hyper-V를 완전히 사용하게 되었지만 커널에 제약이 걸린 부분도 있었으니 말이다.

1-2. CLI와 posix, GNU에 길들여진걸까

뭐 어쨌건간, 그래서 나에겐 임베디드는 무조건 윈도우 환경에서 다루거나, 리눅스 계열 운영체제를 멀티부팅되도록 설치하는 수 밖에 없었다. 사실 아두이노 IDE도 있고, 심지어 Microchip Studio(AVR Studio, Atmel Studio)는 VS기반이어서 윈도우만 지원한다. 그래도 Ubuntu를 다시 직접 설치하기로 마음 먹었다. 어차피 언젠가는 익숙하게 쓰게 될 날이 오기도 할 거고, 이미 WSL을 사용하면서 CLI환경과 posix 환경이 익숙해졌다. 그리고 Windows에도 GNU 프로젝트들이 포팅되고 있지만 뭔가 불편하고 참으로 찝찝하다.

랩탑 용량이 충분하지 않기도 하고, 굳이 두 개를 남겨 놓을 필요가 없다 생각해서 WSL는 제거하고 Ubuntu 20.04 LTS를 Windows와 함께 멀티부팅 되도록 설치하기로 했다.

1-3. 이 글을 작성하기로 한 이유

그동안 몇번 우분투를 설치하면서 매번 설정을 잘못하거나 잘 몰라서 삽질을 참 많이 했었다. 10.04, 12.04, 18.04, 20.04까지, 그리고 각 배포판도 설치를 잘못해서 몇번씩 재설치를 했었는데 그때마다 똑같은 실수를 반복했었다. 지금 이 글을 작성하는 건 다른 사람들이 보는 것보다 (혹시 다음에 다시 설치할 일이 있을 때) 같은 실수를 반복하지 않도록 내가 참고하기 위함이다.


2. 설치 미디어 준비하기

2-1. 설치 ISO 이미지

이미지야 Ubuntu 홈페이지에서 받으면 되겠다. 한국에도 mirror서버가 있어 금방 다운로드할 수 있다.

2-2. 설치 이미지 미디어 (저장매체)

‘ubuntu-20.04.2.0-desktop-amd64.iso’와 같은 이미지 파일을 받았으면, 이 파일을 준비한 USB 메모리에 쓰는 작업을 해야겠다. Ubuntu 10.04때까지만 하더라도 설치 이미지가 700MB를 넘지 않아 CD로도 설치 가능했다. 지금은 2GB를 넘기니 넉넉히 4GB이상의 USB 메모리를 준비해야겠다.

2-3. rufus: 부팅 USB 제작 프로그램

그동안은 ‘UltraISO’를 사용했었는데 ‘rufus‘가 필요한 기능들만 모여있고 훨씬 나은 것 같다.

1.png

위와 같이 rufus를 통해 ubuntu 설치이미지를 USB 메모리에 썼다. 미리 준비한 장치를 지정하고, ISO이미지 선택하는 건 어려운 일은 아니다. 그 다음이 중요하다.

2-3-1. UEFI/BIOS, GPT/MBR

현재 쓰는 랩탑은 그리 오래되지 않았기 때문에 UEFI를 사용중이며 이에 따라 GPT형식의 파티션을 굳이 바꾸지 않고 그대로 사용중이다. 반면 전에 사용하던 데스크탑은 굉장한 구닥다리였기때문에 Legacy BIOS를 사용했고, 당연히 MBR형식을 사용했었다.

중요한건, 현재 BIOS를 사용하는지 UEFI를 사용하는지, 그리고 그보다 현재 사용중인 운영체제의 디스크가 GPT형식을 사용하는지, MBR형식을 사용하고 있는지 확인해서 그대로 해주는 게 좋겠다.

  • UEFI (no CSM or off) → GPT형식 사용
  • UEFI (CSM on) → MBR형식 사용
  • Legacy BIOS → MBR형식 사용

그리고 USB 메모리를 NTFS로 포맷시켰다. 당연히 FAT32일 줄 알았는데, FAT32로 포맷했더니 인식을 못했고 NTFS로 포맷했더니 UEFI에서 인식했다. 아직도 왜 그런건지 잘 모르겠다.

webnautes님의 글

  1. 파일 시스템은 특별한 경우가 아니면 변경할 필요가 없습니다. 파티션 선택시 정해지는 파일 시스템을 그대로 사용하면 됩니다.
    • Windows 10 Version 20H2 ( October 2020 Update ) 사용시: 파일시스템으로 NTFS를 사용합니다.
    • Windows 10 Version 2004 (May 2020 Update ) 이하 버전 사용시: GPT 파티션의 경우에는 반드시 FAT32로 해야합니다.
    • MBR 파티션 방식 사용시: 파일시스템으로 NTFS를 사용합니다.

2-3-2. ISO Image / DD Image

뭐 어쨌든 이제 시작을 누르면…

2.png

또 이걸 물어본다. ISO Hybrid 이미지를 배포했기때문에 ‘ISO이미지모드로 쓰기’를 선택해야한다. ‘DD이미지모드로 쓰기’를 하면… 그냥 안된다…

조금 기다리면 쓰기가 끝나고 이제 이 USB 메모리로 부팅을 시도하면 되겠다.


3. UEFI/BIOS에서 USB 메모리로 부팅시키기

그냥 USB 꽂고 재부팅시킨다고 설치화면으로 넘어가지 않는다. 부팅 우선순위도 있고, 속성도 활성화 해야하고 좀 확인하고 넘어가야 할 것들이 많다.

3-1. UEFI/BIOS 진입

컴퓨터가 켜지고 OS 부팅에 진입하기 전, ‘F2’를 눌러 UEFI/BIOS Setup에 진입해서 설정을 하자. (BIOS Setup 진입 key는 보드 제조사 별로 다르다. 검색)

3-2. Boot Priority Order

3.jpg

먼저 Boot Priority Order를 설정해주자. 환경에 따라 순서, 이름, 표기는 조금씩 다르겠지만 SATA HDD에 윈도우가 설치되어있고, 우리가 앞서 준비한 설치 미디어는 USB HDD에 나타날 것이다. 당연히 우선순위가 높은 순서대로 부팅가능한지 검사하여 부팅되겠다. 그러니 준비한 설치미디어가 높은 우선순위가 되도록 조정하자.

3-3. Secure Boot

근데 이렇게 해도 준비한 설치미디어로 부팅되지 않을 수 있다. 아래와 같이 Secure Boot Option을 잠시 비활성화 해주자. (옵션의 위치는 UEFI마다 다르다.)

4.jpg

이제 진입 가능할 것이다. 안되면… 뭐가 잘못된거니 검색해서 다시 찾아봐야지…


4. Ubuntu 설치 & 파티션 설정

5.jpg

이제 영롱한 grub가 우리를 맞이해야 한다. 매 배포판 버전마다 grub에 나타나는 Ubuntu항목이 조금씩 다른것 같다. 어쨌든, 설치뿐만 아니라 설치하지 않고 우분투를 체험하는 기능도 제공해왔으며, 어느순간부터 OEM전용 설치항목이 생겼다.

6.jpg

4-1. 설치 형식

4-1-1. 설치할 소프트웨어

7.png

굳이 설명할 필요는 없을 것 같지만… 급하게 설치해야하거나 설치를 빠르게 마치고 싶다면 최소 설치를 선택하고 업데이트와 Thrid-party 소프트웨어 설치를 해제해야겠다.

하지만 시간도 있고, 어차피 나중에 다 설치할 생각이었기 때문에 모두 다 선택했다. third-party software 옵션 중에는 독점 소프트웨어가 포함되어 있다. 설명을 읽으면 알겠지만 그래픽카드, 무선랜 드라이버나 코덱 등은 각자 라이선스가 있기 때문에 여기에 따로 분류되어 있다. 이러한 요소들이 제대로 설치되어야 최적의 사용자 환경이 구성되기 때문에 나중에 설치할 거 아니면 지금 설치하자. (설치 후 나중에 ‘Additional Drivers’ 항목에서 찾아 설치할 수도 있다.)

4-1-2. 상황에 따른 설치 파티션 자동 설정

8.png

이제 디스크에 어떻게 설치할 지를 묻는다. 현재 디스크에 설치된 운영체제들에 따라 다르게 물어본다. 위 스크린샷은 이미 우분투 설치를 끝낸 후 찍어서 저렇게 뜬다. 보통 윈도우 시스템 드라이브와 여유공간이 남아있는 상태라면 아래와 같은 항목이 나타난다.

  • Windows를 그대로 두고 여유공간에 Ubuntu 설치
  • 디스크 전체를 지우고 Ubuntu를 설치
  • 기타

Ubuntu를 단독으로 사용한다면 디스크 전체를 지우고 설치하는 옵션도 좋다만, 다른 운영체제도 함께 남겨놓을 거라면 ‘기타’를 통해 수동으로 파티션을 만들어 할당해주자.

4-2. 파티션 수동 설정

9.png

이제 위와 같이 파티션 설정과 마운트 작업을 할 수 있다.

4-2-1. Primary Partition 만들기

10.png

너무나 당연하게도, Primary Partition은 ext4로 포맷한다. 마운트 위치를 ‘/’로 설정한다. 이제 아래에서 설정하는 디렉토리를 제외한 모든 디렉토리는 이 파티션에 할당된다.

4-2-2. swap 및 다른 디렉토리 마운트를 위한 파티션 만들기

목적에 따라 몇몇 디렉토리 및 영역을 다른 파티션에 할당할 수 있다. ‘/boot’, ‘/usr’, ‘/home’, ‘swap area’등…

‘/home’ 디렉토리를 Primary 파티션으로부터 분리한다면 나중에 운영체제를 재설치 하더라도 해당 파티션을 남겨서 백업없이 자료를 남길 수 있다는 장점이 있다.

‘swap 영역’도 개별적으로 파티션을 할당해서 사용할 수 있다.

굳이 필요성을 느끼지 못했거나, 상황에 따라 필요한 공간이 달라지기 때문에 동적으로 조정할 수 있게 남겨두고 싶어서 다른 디렉토리를 마운트하기 위한 별도 파티션을 설정하진 않았다.

4-2-3. Bootloader

Bootloader로 GNU GRUB를 설치하게되는데 이 설치위치도 조금씩 달라진다.

Legacy BIOS와 MBR을 사용중이었다면 저장장치 최상단(예시에서는 ‘/dev/sda’)에 설치하면 된다.

UEFI와 함께 GPT를 사용중이라면 ‘EFI’형식의 500MB이하의 파티션(예시에서는 ‘/dev/sda1’)이 존재할 것이고, 기존에 사용하던 운영체제의 부트로더(예시에서는 ‘Windows Boot Manager’)가 있을 것이다. 이 파티션에 bootloader를 설치하면 된다.

4-3. 설치

이제 알아서 설치하므로, 기다리면서 시간대, 장치이름, 계정 이름 및 비밀번호 등을 입력하면 된다.

설치가 끝나면 설치미디어를 제거한 후 ‘ENTER’를 누르면 재부팅시킨다. 그럼 이제 당연히 Ubuntu로 부팅할 수 있어야 할텐데…


5. 설치 후…

설치가 끝나고도 신경써야할 부분들이 있다.

5-1. bootmgr 설정으로 grub로 진입하기

Windows Boot Manager가 있는 EFI 영역에 grub를 함께 설치했다면 아마 그냥 자연스럽게 윈도우로 부팅되었을 것이다. 이 EFI영역에 두개의 부트로더가 있으며 이 중 Windows Boot Manager가 우선적으로 실행된 것이다.

그럼 BCD(Boot Configuration Data)에게 grub를 먼저 실행하라고 알려줘야겠다. (Windows Boot Manager는 grub로의 chain loading을 지원하지 않으므로 grub가 1차 부트로더가 되어야 한다.)

윈도우에서 바로 bcdedit 유틸을 사용해서 해결할 수 있다. bcdedit이 BCD를 수정하기 위해 관리자권한이 필요함에 유의하라.

하지만 bcdedit의 사용방법은 알 바가 아니고, 그냥 아래와 같은 명령을 관리자 권한으로 실행하였다.

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

나중에도 써먹기 위해서 배치파일로 만들어두었다. 배치파일도 관리자 권한으로 실행하면 된다.

이제 다시 재부팅하면 영롱한 grub와 Ubuntu 로그인 화면이 사용자를 맞이한다.

5-2. 한글사용하기

끝나지 않았다. 한글과 한국어는 분명 우수한 문자/언어이지만 이미 알파벳 기반으로 컴퓨팅환경이 구성된 상황에서 어거지로 끼워맞춘 이 상황에서는 혐오스러울 정도다. 조합형 vs 완성형 고통받는 설믜씨

보통 텍스트, 언어 입력기, 폰트 등에서는 한글 뿐 아니라 한중일을 싸그리 묶어 CJK라 한다. 셋 다 알파벳과 호환도 안 되고 표현해야할 문자가 훨씬 많아서 번역, 지역화가 덜 된 소프트웨어의 경우 CJK가 제대로 지원되지 않는 경우가 허다하다. (후술할 vscode도)

5-2-1. iBus 사용하기

어쨌든, Ubuntu에서는 iBus-Hangul을 통해 한글을 입력할 수 있다. 아래와 같이 Settings → Region & Language 에서 입력기 설정을 찾아볼 수 있다.

11.png

입력기는 Korean(Hangul)만으로도 충분하다. 한국어 입력기에 이미 알파벳, 한글 모두 있기 때문에 괜히 영어 키보드도 함께 있으면 헷갈리기만 한다. 저 한글입력기의 설정을 눌러보자.

12.png

위와 같이 iBus Hangul 설정이 나온다. ‘Hangul Toggle Key’에 주목해야 한다. 추가를 눌러 한영 전환 키를 지정할 수 있다. (한/영 키는 시스템에서 ‘Alt_R(Alt_Right)’으로 인식함에 유의하라) 필자는 한영키와 함께 ‘Ctrl+Shift+Space’도 이용하기로 했다. 이유는 후술

5-2-2. philoskim님의 팁: snap으로 설치하는 몇몇 프로그램의 iBus 충돌 이슈

vscode를 Ubuntu Software Center에서 설치 한 후 한글 입력이 안 되서 깜짝 놀랐다. 아니 이게 안된다고…? 검색 해보니 위와 같은 이슈가 있어서 제거 후 deb형식 배포판을 직접 다운로드 받아 설치했더니 해결되었다.

5-2-3. 한/영 키…

한/영 키는 시스템에서 ‘Alt_R(Alt_Right)’으로 인식함에 유의하라

앞서 이야기 했듯 어쨌든 한영키를 ‘Alt’키로 인식하기 때문에 다른 프로그램들 중 ‘Alt’키가 예약되어있는 경우 한/영 전환보다 해당 Action이 우선인 경우가 있다. 대표적으로 Linux VS Code…

랩탑의 경우 키보드 크기를 줄이기 위해 Alt_R과 한영 키를 합쳐놓은 듯 하다. 다른 키보드를 연결하니 한/영 키 잘 인식한다.

앞서도 이야기 했듯, 그래서 한/영 전환 키에 ‘Ctrl+Shift+Space’도 추가해서 사용중이다. 불편했는데 이제 어느정도 적응 됐다.


글을 다 쓰고 마지막으로 확인 겸 검색해봤더니 훨씬 잘 정리된 글들이 많았다…^^

coding-factory님의 글을 보면 좋겠다.

This work is licensed under Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.
(The excerpted works are exceptionally subject to a licence from its source.) Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)