리눅스와 윈도우를 한 컴퓨터에 성공적으로 설치했다면 남아있는 한 가지 문제는 부팅할 운영체제를 선택할 수 있도록 설정하는 것이다. 부팅 과정에서 잘 설정했다면 상관없지만, 나처럼 리눅스와 윈도우를 서로 다른 디스크에 서로의 존재를 모른 채 설치해놓고는 나중에 둘을 하나의 부팅 메뉴에 띄우려고 하면 생각보다 쉽지 않다는 것을 알게 된다. 아치위키를 비롯해 다양한 곳에서 다양한 방법을 제시하지만 나는 오늘 G군의 도움을 받아 2025년 현재 가장 확실하고 안전한 방법을 찾았다.
그 방법이란 윈도우로 부팅하여 bcdboot 명령을 활용하는 것이다. bcdboot를 쓰면 윈도우의 부트로더인 "Windows Boot Manager"를 지정한 부팅 파티션(또는 ESP, EFI 시스템 파티션도 같은 말)에 설치할 수 있다. 윈도우 내장 명령이므로 이보다 더 공식적인 지원을 받을 수 없고, 파일을 복사한다든지 번호를 알아내서 하드코딩한다든지 하는 다른 방식들과 달리 정확히 부트로더 설치를 위해 만들어진 명령이기 때문에 이보다 더 안전하고 정확할 수 없을 것이다.
일단 리눅스에서는 부트로더로 systemd-boot를 사용한다고 가정한다. systemd-boot는 리눅스를 설치할 때 systemd와 함께 기본적으로 깔려온다는 점에서 다른 사설 부트로더인 grub이나 rEFInd에 비해 "근본"이라고 할 수 있다. 장점으로는 설정이 비교적 직관적이라는 것이고, 단점으로는 컴퓨터를 켜면 맨 처음 뜨는 부팅 선택 메뉴가 밋밋하다는 점이 있겠다.
아 그리고 또 윈도우와 리눅스 모두 GPT 테이블을 쓴다고 가정한다. 디스크를 새로 파티션할 때 파티션 방식을 GPT와 MBR 가운데에서 고를 수 있는데 GPT가 더 모-던한 방식이니 누구한테 묻더라도 백이면 백 GPT를 쓰라고 할 것이다. 컴퓨터 펌웨어가 UEFI를 잘 지원한다면, 다시 말해 컴퓨터가 지나치게 오래되지 않았다면, GPT로 설치한 두 운영체제가 모두 잘 부팅이 될 것이다. 부트 메뉴가 아직 없는데 어떻게 부팅을 하냐고 묻는다면 BIOS에서 직접 선택하면 된다는 점을 상기시켜주겠다. 나처럼 찐빠를 내지 않았다면 BIOS 부트 메뉴에 "Linux Boot Manager"와 "Window Boot Manager"가 잘 뜰 것이다.
이제 본격적으로 윈도우 부팅 메뉴를 추가해보자.
우선 bcdboot를 쓰기에 앞서, 메인 부트로더가 들어있는 파티션(ESP)을 찾아서 이름을 붙여줘야 한다. 여러가지 방법이 있겠지만, 한 가지 가능한 방법은 크기를 기준으로 찾는 것이다. diskpart 명령어를 쓰면 파티션(윈도우 용어로는 '볼륨')들의 정보를 받아 원하는 파티션에 이름을 붙일 수 있다.
C:\Windows\System32>diskpart
Microsoft DiskPart 버전 10.0.22621.1
Copyright (C) Microsoft Corporation.
컴퓨터: DESKTOP-51FUOBR
DISKPART> list volume
볼륨 ### Ltr 레이블 Fs 형식 크기 상태 정보
-------- --- ---------- ---- --------- ------- ------------ --------
Volume 0 C NTFS 파티션 222 GB 정상 부팅
Volume 1 FAT32 파티션 100 MB 정상 숨김
Volume 2 NTFS 파티션 689 MB 정상 숨김
Volume 3 D HDD NTFS 파티션 1863 GB 정상
Volume 4 FAT32 파티션 1024 MB 정상 시스템
내 경우에는 수상하게 크기가 1024MB로 예쁘게 떨어지는 Volume 4가 리눅스 부트로더가 깔린 파티션이다. 이 4번 파티션(볼륨)을 선택하고 알파벳 이름을 붙여준다. 여기서는 S로 했다.
DISKPART> select volume 4
4 볼륨이 선택한 볼륨입니다.
DISKPART> assign letter=S
DiskPart에서 드라이브 문자 또는 탑재 지점을 할당했습니다.
DISKPART> exit
DiskPart 마치는 중...
메시지가 참 친절하다. 이제 이 S:로 이름이 붙은 파티션에 bcdboot 명령을 통해 부트로더를 설치해준다.
C:\Windows\System32>bcdboot C:\Windows /s S: /f UEFI
부팅 파일을 만들었습니다.
그럼 끝이다! 재부팅을 리눅스와 윈도우로 한두번 정도 재부팅해보면 서로 새로운 이웃에 적응하느라 디스크 검사도 돌리고 부팅 우선순위도 바꾸고 그러지만, BIOS로 부팅해서 리눅스 부트로더가 첫번째로 오도록 잘 설정해주면 그 뒤로는 매번 리눅스 부트로더로 부팅이 잘 된다. 이렇게 깔끔하게 해결되는 문제인 줄 여태까지 모르고 잘도 써왔구나 싶다.