PXE 부팅으로 Ubuntu 22.04 설치하기 [1편]
소수의 베어메탈 서버 또는 가상 머신(VM)의 경우에 수동으로 OS를 설치하는 작업은 크게 어렵지 않습니다. 베어메탈의 서버의 경우 부팅 USB를 통해서, VM의 경우 ISO 파일을 Import 하는 형식으로 합니다. 그러나, 다수의 베어메탈 서버나 VM을 대상으로는 이러한 방식이 매우 비효율적이 됩니다. 이런 경우 동시에 여러 대의 노드에 OS를 설치할 수 있는 방법이 필요한데 이번 포스팅에서는 그 방법 중 하나인 PXE 부팅에 대해서 알아보겠습니다.
일반적인 부팅 프로세스
PXE 부팅에 대해서 학습하기 전에, 우선 일반적인 컴퓨터의 부팅 프로세스에 대해서 알아 보겠습니다.
1. 전원 공급(Power-On)
컴퓨터의 전원이 켜지면 CPU, 메모리, 저장 장치 등 하드웨어에 전기가 공급됩니다. 이때 CPU는 초기화되고, 어디서부터 명령을 실행할지 찾기 시작합니다.
2. BIOS/UEFI 실행
전원이 들어오면 가장 먼저 실행되는 건 BIOS(Basic Inpout/Output System) 또는 UEFI(Unifed Extensible Firmware Interface)입니다. (최근의 컴퓨터의 경우에는 대부분 UEFI를 사용하지만, 이를 BIOS라 칭하기도 합니다.) 이는 컴퓨터 메인보드에 내장된 작은 소프트웨어로, 하드웨어를 초기화하고 기본적인 동작을 점검합니다. 이를 POST(Power-On Self-Test)라고 하는데, 참고로 일반 사용자 PC의 경우에 이 과정이 상당히 짧지만, 서버의 경우에는 수십 초에서 수분이 걸리기도 합니다.
3. 부트로더 로드
BIOS/UEFI는 부팅할 디스크를 찾아서 그 안에 있는 부트로더(Bootloader)를 메모리에 적재합니다. 이 부트로더는 운영체제(OS)를 실행하기 위한 준비를 하는 작은 프로그램으로 Windows는 Windows Boot Manager, 리눅스의 경우에는 GRUB이 그 역할을 합니다. 부트로더는 보통 저장 장치의 특정 영역(MBR 또는 EFI 파티션)에 저장되어 있습니다.
4. 운영체제 커널 로드
부트로더가 실행되면 운영체제의 핵심 부분인 커널(Kernel)을 메모리에 불러옵니다. 커널은 하드웨어와 소프트웨어를 연결하는 역할을 하며, 파일 시스템, 네트워크, 프로세스 관리 등을 준비합니다.
5. 운영체제 초기화 및 사용자 환경 로드
커널이 기본 설정을 마치면 나머지 운영체제 구성 요소(드라이버, 서비스 등)를 로드하고, 마지막으로 로그인 화면이나 데스크톱 같은 사용자 인터페이스를 띄웁니다.
OS 설치 절차
OS 설치 절차 역시 초기 과정은 부팅과 거의 흡사합니다. 다만 부팅에 사용되는 매체가 USB와 같은 외부 장치라는 점에서 차이가 발생합니다. 최초에 OS를 설치하기 위해서는 BIOS/UEFI에서 부팅 순서를 USB와 같은 설치할 OS가 담겨 있는 매체로 변경합니다. 일반적으로 컴퓨터의 전원을 켰을 때 F2, Del, F12와 같은 키를 누르면 BIOS/UEFI로 진입하게 되는데 여기에서 부팅 순서를 변경할 수 있습니다.
OS를 설치하는 과정은 일반적인 부팅 프로세스의 첫 두 단계(1. 전원 공급, 2. BIOS/UEFI 실행)까지는 동일합니다. 하지만 부팅 순서를 미리 USB와 같은 부팅 매체가 첫 번째가 되도록 변경하였기 때문에, 해당 매체의 부팅 섹터(MBR 또는 EFI 파티션)에 있는 부트로더를 읽어 메모리로 로드합니다. 그리고 커널을 로드하고 ISO 이미지를 통해 설치 작업을 수행하게 되죠. 사실상 일반적인 부팅 순서와 크게 다르지 않습니다. 부트로더를 읽는 매체가 바뀌었을 뿐이죠.
Concept of PXE Booting
PXE란 Preboot Execution Environment의 줄임말입니다. 우리 말로는 '사전 부팅 실행 환경' 정도로 해석해 볼 수 있을 것 같습니다. 그래서 PXE 부팅은 로컬 디스크나 USB 대신 네트워크 서버에서 부팅 이미지를 가져와 운영체제를 부팅하는 방식을 의미합니다.
이 기술은 이미 나온 지가 제법 된 기술입니다. 1990년대 후반 인텔 주로도 만들어졌으며, 네트워크 기반의 시스템 관리와 배포를 목적으로 설계되었습니다. 앞서 살펴본 것처럼 부팅에 필요한 모든 파일(부트로더, 커널, OS 이미지 등)을 네트워크 서버에서 가져와 메모리로 로드한 뒤 실행하도록 합니다. 쉽게 말해, PXE는 '네트워크로 컴퓨터를 부팅하는 방법'이라고 생각할 수 있습니다.
PXE 부팅의 상세 작동 원리
1. PXE 클라이언트 준비
(1) 하드웨어 요구사항
- PXE 기능이 지원되는 NIC(대부분의 현대의 NIC는 PXE를 지원함)
- BIOS/UEFI에서 PXE 부팅 옵션이 활성화
(2) 초기 동작
- 전원이 켜지면 BIOS/UEFI가 POST를 거친 후, PXE 부팅을 시도하도록 설정된 NIC의 PXE 코드를 실행
- 이 PXE 코드는 네트워크를 통해 외부 서버와 통신할 수 있는 최소한의 네트워크 스택을 제공
2. DHCP와의 상호작용
(1) DHCP의 역할
- PXE 클라이언트가 네트워크에 접속하려면 IP 주소가 필요하고, 이를 위해 DHCP 서버에 요청을 보냄
- 일단 DHCP 요청과 달리, PXE 요청은 자신이 PXE 클라이언트임을 알리는 플래그(Option 60: PXEClient)를 포함
(2) DHCP 응답
- IP 주소, 서브넷 마스크, 게이트웨이 제공
- 추가로 부팅서버(TFTP 서버) IP와 부팅 파일 이름(예: pxelinux.0)을 알려줌(Option 66, 67)
3. TFTP를 통한 부트로더 전송
(1) TFTP란?
- Trivial File Transfer Protocol은 가볍고 단순한 파일 전송 프로토콜로, PXE에서 부팅 파일을 빠르게 가져오는 데 사용됨
- TFTP는 속도가 빠르고 UDP 기반이라 초기 부팅에 적합하나, 대용량 파일 전송에는 한계가 있어 주로 부트 로더만 전달
(2) 동작
- PXE 클라이언트는 DHCP가 알려준 TFTP 서버에 접속해 부팅 파일을 다운로드
- 이 부팅 파일은 네트워크 부팅용 부트로더로, 메모리에 로드된 후 실행
4. 부트로더의 역할과 설정
(1) 부트로더 종류
- PXE 환경에서는 PXELINUX(SYSLINUX 계열)나 네트워크 지원 GRUB이 자주 사용됨
(2) 설정 파일
- 부트로더는 TFTP 서버에서 추가 설정 파일(예: pxelinux.cfg/default)을 가져옴
- 이 파일에 커널 위치, 초기 RAM eltmzm(initrd), 부팅 옵션이 정의되어 있음
#pxelinux.cfg/default 예시
DEFAULT ubuntu-autoinstall
LABEL ubuntu-autoinstall
MENU LABEL Install Ubuntu 22.04
KERNEL vmlinuz
APPEND initrd=initrd ip=dhcp url=http://192.168.100.200/ubuntu/ubuntu-22.04.5-live-server-amd64.iso
5. 커널과 OS 로드
(1) 커널과 RAM 디스크
- 추가 설정파일에 정의된 커널과 RAM 디스크를 TFTP나 NFS등에서 다운로드하여 메모리에 적재
(2) OS 설치 진행
- 커널이 실행되면서 OS를 설치하는 작업을 수행
- OS 이미지는 HTTP 서버에서 제공
- 사전 정의된 설정이 있다면 자동 설치도 가능
이번 포스팅에서는 컴퓨터의 부팅부터 시작하여 PXE 부팅의 개념과 그 절차에 대해서 알아보았습니다. 다음 포스팅에서는 실제 데모 환경을 구축하여 PXE 부팅을 진행해 보도록 하겠습니다.
PXE 부팅으로 Ubuntu 22.04 설치하기 [2편]
이전 포스팅 'PXE 부팅으로 Ubuntu 22.04 설치하기 [1편]'에서 이어지는 포스팅입니다. 이전 포스팅을 보지 않았다면 먼저 보고 오시는 것을 추천드립니다. PXE 부팅으로 Ubuntu 22.04 설치하기 [1편]소수
tech-recipe.tistory.com