Computer >> 컴퓨터 >  >> 시스템 >> Windows

리눅스에서 Windows 10 부팅 가능한 USB 설치 미디어 만드는 방법

이 작업을 시도하게 된 계기는 조금 복잡합니다. 좋은 이야기가 늘 그렇듯, 하나의 문제에서 출발했거든요. 저는 Windows 10과 여러 리눅스 배포판으로 멀티부팅을 구성한 노트북을 사용 중이었는데, 이 노트북이 갑자기 말썽을 부리기 시작했습니다. 부팅이 되지 않았고, 화면에는 아무것도 나타나지 않았습니다. 결국 시스템을 하나씩 복구해 나갔고, 마지막까지 남은 것은 유독 고집스럽게 굴던 Windows 10이었습니다.

Windows 10 설치 미디어를 직접 활용하면, 부팅 실패 시 Windows가 자동으로 제공하는 복구 옵션보다 복구 도구와 설정을 훨씬 세밀하게 제어할 수 있습니다. 이를 위해서는 부팅 가능한 미디어를 직접 만들어야 하는데, 막상 해보니 생각보다 복잡한 작업이었습니다. 저는 이 과정에서 서드파티 도구에 의존하지 않고 순수하게 리눅스 표준 도구만으로 작업하기를 원했습니다. 표준 도구로 해결할 수 있다면 어떤 환경에서든 동일하게 재현할 수 있기 때문입니다.

1단계: Windows 10 ISO 다운로드

의외로 만만치 않은 단계입니다. Windows 환경에서는 '미디어 생성 도구(Media Creation Tool)'만 제공되기 때문에, 순수한 ISO 파일을 받으려면 브라우저의 사용자 에이전트(User-Agent)를 변경하거나 아예 리눅스 배포판에서 직접 다운로드하는 것이 좋습니다. 어차피 우리는 지금 리눅스를 다루고 있으니 후자가 가장 자연스러운 선택이겠죠. 첫 번째 관문을 무사히 통과했습니다.

2단계: ISO 마운트 및 파일 추출

ISO 파일을 내려받았다면, 이제 홈 디렉터리처럼 쓰기 가능한 위치에 내용물을 추출해야 합니다. ISO를 loopback 장치로 마운트하면 읽기 전용이 되므로, 내용물을 직접 복사해 두는 것이 좋습니다. 일부 리눅스 파일 관리자는 ISO 파일을 기본적으로 추출하지 못하는데, 실제로 저는 아래와 같은 오류를 만났습니다.

이 디스크는 "UDF" 파일 시스템을 포함하고 있으며,
ISO-13346 "UDF" 파일 시스템 규격을 지원하는 운영체제가 필요합니다.

그렇다면 수동으로 마운트한 뒤 복사하는 방식으로 진행해야 합니다:

mount -o loop windows10.iso /mountpoint
cp -r -T /mountpoint/ /home/"user"/windows10data

3단계: install.wim 압축하기

위 과정을 굳이 거친 이유는 바로 ISO 안의 install.wim 파일이 4GB를 초과하기 때문입니다. 이 파일을 압축해야 하는데, 그 이유는 시스템 펌웨어에 따라 NTFS로 포맷된 장치를 부팅하지 못하는 경우가 많기 때문입니다(실제로 대부분 그렇습니다). 안전하게 진행하려면 USB 드라이브를 FAT32로 포맷해야 하며, FAT32에는 단일 파일 크기 4GB 제한이 있습니다.

install.wim 파일은 sources 폴더 아래에 있습니다. 즉, /home/"user"/windows10data/sources/install.wim 경로에 위치합니다. 파일을 압축하려면 wimlib이라는 도구가 필요하며, 대부분의 배포판 저장소에서 찾을 수 있습니다. 필자는 Kubuntu 18.04에서 작업했는데, 해당 패키지가 문제없이 제공되었습니다.

sudo apt-get install wimtools

이제 ISO 파일들이 담긴 폴더 안에서 압축을 실행합니다:

sudo wimlib-imagex optimize install.wim --solid

권한 문제로 오류가 발생할 수 있으므로 sudo를 함께 사용하는 것이 좋습니다:

[ERROR] Can't modify "/home/roger/win/sources/install.wim": Permission denied
ERROR: Exiting with error code 71:
The WIM is read-only (file permissions, header flag, or split WIM).

정상적으로 완료되면 다음과 같은 결과를 확인할 수 있습니다:

"install.wim" original size: 4463411 KiB
Using LZMS compression with 8 threads
Archiving file data: 9 GiB of 9 GiB (100%) done
"install.wim" optimized size: 3311533 KiB
Space saved: 1151878 KiB

4.4GB였던 이미지가 3.3GB로 줄어들어 약 30%의 용량 절감 효과가 있었습니다. 덕분에 향후 Windows 10 ISO 파일 크기가 더 늘어나더라도 FAT32 파일 시스템과의 조합에서 이 방법이 상당 기간 유효할 것으로 보입니다.

4단계: USB 장치 준비

이번에는 최소 8GB 이상의 USB 드라이브가 필요합니다. 드라이브는 반드시 파티셔닝을 거쳐야 합니다. GParted나 KDE Partition Manager 같은 GUI 도구를 사용해도 되고, 명령줄에 익숙하다면 fdisk나 gdisk를 활용할 수도 있습니다. 먼저 새로운 GPT 파티션 테이블을 생성합니다. 그다음 단일 FAT32 파티션을 하나 만들되, 부팅 플래그(boot flag)는 설정하지 않습니다. 즉, 파티션이 "msft-data" 유형으로 인식되면 됩니다.

리눅스에서 Windows 10 부팅 가능한 USB 설치 미디어 만드는 방법

명령줄에서도 동일하게 작업할 수 있습니다. gdisk를 예로 들면:

sudo gdisk /dev/[장치 이름]

실행 결과는 대략 다음과 같습니다:

sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help):

잘못된 장치를 초기화해서 소중한 데이터를 잃지 않도록 각별히 주의하세요! gdisk에서는 다음 단계를 따릅니다:

  • o — 새로운 GPT 파티션 테이블을 생성합니다.
  • n — 새 파티션을 생성합니다(번호, 섹터 등은 기본값을 사용해도 무방합니다).
  • w — 변경 사항을 디스크에 기록합니다(대상 장치를 다시 한번 신중하게 확인한 뒤 진행하세요).

도구를 종료한 뒤 파티션을 포맷합니다:

sudo mkfs.vfat /dev/[장치 및 파티션 이름]

예를 들어 /dev/sdb1처럼 입력하면 됩니다. mkfs.vfat 명령은 기본적으로 최적의 FAT 크기를 자동으로 선택하며, -F 플래그로 강제 지정할 수도 있습니다. 다만 대부분의 경우 별도 변경 없이 기본값인 FAT32 파일 시스템으로 포맷됩니다.

Disk /dev/sdb: 14.9 GiB, 16008609792 bytes, 31266816 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 43479D21-6D76-2CA4-A7BA-596C08A99193

Device     Start      End  Sectors  Size Type
/dev/sdb1   2048 31260671 31258624 14.9G Microsoft basic data

5단계: USB에 데이터 복사

모든 준비가 끝났으니, 이제 압축된 install.wim이 포함된 ISO 내용물 전체를 USB 드라이브로 복사합니다:

sudo mount /dev/[장치 및 파티션 이름] /usb/mount/point/
sudo cp -r -T /location/windows10data /usb/mount/point/

마지막으로 파티션 테이블과 복사된 내용물을 확인하는 화면입니다.

리눅스에서 Windows 10 부팅 가능한 USB 설치 미디어 만드는 방법

이제 모든 준비가 완료되었습니다. 부팅 단계로 넘어갈 차례입니다.

6단계: 대상 장치에서 Windows 10 부팅

이제 남은 일은 대상 장치에서 USB로 부팅하는 것뿐입니다. BIOS/UEFI 부팅 메뉴에서 USB 드라이브를 선택하면 Windows 10 설치 화면이 나타납니다.

선택 사항: USB에 NTFS 파티션 구성하기

"Windows는 공식적으로 어떻게 이 문제를 처리할까", 혹은 "woeusb나 Rufus 같은 도구는 4GB가 넘는 install.wim 파일을 어떻게 다룰까" 궁금할 수 있습니다. 사실 UEFI 시스템에서도 NTFS 장치 부팅이 가능하지만, 몇 가지 추가 작업이 필요합니다.

핵심은 UEFI:NTFS 부트로더를 활용하는 것입니다. 세부 원리보다는 절차 위주로 소개하겠습니다. 앞서 소개한 FAT32 방식을 사용하기 어려운 상황이라면 아래 순서를 참고하세요(대안도 있지만, 이는 그중 하나의 방법입니다):

  • USB 장치에 새로운 GPT 또는 MBR 파티션 테이블을 생성합니다.
  • 전체 용량에서 512KB를 뺀 크기의 NTFS 파티션을 만듭니다.
  • 512KB 크기의 FAT16 파티션을 만듭니다.
  • FAT16 파티션에 boot 및 lba 플래그를 설정합니다.
  • pbatard의 Rufus GitHub 저장소에서 UEFI 부트로더 이미지를 다운로드합니다.
  • 이미지를 마운트하거나 추출합니다(앞서 ISO를 다룬 방식과 동일합니다).
  • 이미지에 포함된 efi 파일들을 FAT16 파티션으로 복사합니다.
  • Windows 10 ISO 내용물을 NTFS 파티션으로 복사합니다.

마무리

여기까지가 이 튜토리얼의 전부입니다. 사소해 보이는 작업이 의외로 복잡한 결과로 이어지는 경우가 종종 있는데, 오늘 살펴본 사례가 바로 그렇습니다. 서드파티 도구에 크게 의존하지 않고 리눅스에서 Windows 10 USB 설치 미디어를 직접 만들고 싶다면, 이 가이드의 단계를 그대로 따라 하시면 됩니다.

이번 과정에서 우리는 ISO 이미지 다루기, WIM 파일 압축, 장치 파티셔닝과 포맷까지 폭넓은 내용을 배웠고, UEFI 환경에서 NTFS 장치를 부팅하는 선택적 팁까지 얻었습니다. 수많은 USB 제작 도구들이 내부적으로 처리하는 바로 그 비밀이죠. 이제 여러분도 그 비밀을 알게 된 셈입니다. 그럼 이만, 즐거운 설치 되시기 바랍니다!