PXE (Preboot Execution Environment)¶
PXE 부팅을 통한 대량 OS 자동 설치 방법을 정리한다.
네트워크 부팅을 통해 수십~수백 대 서버를 자동으로 배포한다. DHCP + TFTP + HTTP 서버 조합으로 중앙화된 이미지를 배포하며, Kickstart/Preseed로 무인 설치가 가능하다.
배경 및 필요성¶
문제 상황: - GPU 클러스터 구축 시 동일한 OS 이미지를 100대 서버에 설치해야 함 - IPMI로 서버마다 ISO 마운트 + 수동 설치 = 며칠 소요 - 설치 후 서버마다 설정이 미묘하게 다르면 (패키지 버전, 커널 파라미터) 디버깅 지옥
해결책: - PXE 부팅: 로컬 디스크 없이 네트워크에서 부트로더/커널/초기 파일시스템 다운로드 - 중앙화된 이미지 배포: DHCP + TFTP + HTTP 서버 조합 - 자동화: Kickstart/Preseed로 무인 설치 (사람 개입 없음)
아키텍처¶
graph TB
subgraph "PXE 서버 (Infrastructure)"
A[DHCP 서버<br/>dnsmasq, ISC DHCP]
B[TFTP 서버<br/>부트로더 + 커널 제공]
C[HTTP/NFS 서버<br/>OS 이미지 + 패키지]
end
subgraph "설치 대상 서버"
D[NIC<br/>PXE ROM]
E[메모리<br/>initramfs]
F[디스크<br/>설치 완료 후]
end
D -->|1. DHCP Discover| A
A -->|2. DHCP Offer<br/>IP + TFTP 서버 주소| D
D -->|3. TFTP GET<br/>pxelinux.0| B
B -->|4. 부트로더 전송| D
D -->|5. TFTP GET<br/>vmlinuz + initrd| B
B -->|6. 커널 + initramfs| E
E -->|7. HTTP GET<br/>ubuntu-24.04.4.iso| C
C -->|8. OS 이미지 + 자동 설치 스크립트| F
PXE 부팅 흐름¶
sequenceDiagram
participant NIC as PXE ROM (NIC)
participant DHCP as DHCP 서버
participant TFTP as TFTP 서버
participant HTTP as HTTP 서버
participant Disk as 로컬 디스크
Note over NIC: 전원 켜짐, BIOS가 PXE ROM 실행
NIC->>DHCP: 1. DHCP Discover (브로드캐스트)
DHCP->>NIC: 2. DHCP Offer<br/>(IP: 192.168.1.100<br/>next-server: 192.168.1.10<br/>filename: pxelinux.0)
NIC->>DHCP: 3. DHCP Request
DHCP->>NIC: 4. DHCP ACK
Note over NIC: IP 주소 할당 완료
NIC->>TFTP: 5. TFTP GET pxelinux.0
TFTP->>NIC: 6. 부트로더 (pxelinux.0)
NIC->>NIC: 부트로더 실행
NIC->>TFTP: 7. TFTP GET pxelinux.cfg/default
TFTP->>NIC: 8. 부팅 메뉴 설정
NIC->>TFTP: 9. TFTP GET vmlinuz + initrd.img
TFTP->>NIC: 10. 커널 + 초기 램디스크
Note over NIC: 커널 부팅 시작
NIC->>HTTP: 11. HTTP GET ubuntu-24.04.4.iso<br/>또는 preseed.cfg
HTTP->>NIC: 12. OS 이미지 + 자동 설치 스크립트
NIC->>Disk: 13. 디스크 파티션 + OS 설치
Disk->>NIC: 14. 설치 완료, 재부팅
Note over Disk: 로컬 디스크에서 부팅
단계별 상세:
| 단계 | 프로토콜 | 전송 내용 | 크기 | 설명 |
|---|---|---|---|---|
| 1-4 | DHCP | IP 주소 + TFTP 서버 정보 | ~500 bytes | PXE ROM이 네트워크 설정 받음 |
| 5-6 | TFTP | pxelinux.0 (부트로더) | ~40 KB | SYSLINUX 기반 부트로더 |
| 7-8 | TFTP | pxelinux.cfg/default | ~1 KB | 부팅 메뉴 (커널 경로, 파라미터) |
| 9-10 | TFTP | vmlinuz + initrd.img | ~100 MB | Linux 커널 + 초기 램디스크 |
| 11-12 | HTTP/NFS | ubuntu-24.04.4.iso | ~2 GB | OS 이미지 전체 (TFTP는 너무 느림) |
| 13 | 로컬 | 디스크 쓰기 | ~10 GB | 실제 OS 설치 |
DHCP Option 66, 67¶
PXE 부팅에 필수적인 DHCP 옵션:
| DHCP Option | 이름 | 값 예시 | 역할 |
|---|---|---|---|
| Option 66 | TFTP Server Name | 192.168.1.10 또는 pxe.example.com | TFTP 서버 주소 (next-server 대체) |
| Option 67 | Bootfile Name | pxelinux.0 (Legacy) 또는 grubx64.efi (UEFI) | 부트로더 파일명 |
DHCP Offer 패킷 구조:
DHCP Offer 예시:
Message type: Boot Reply
Your IP: 192.168.1.100 ← 클라이언트에게 할당할 IP
DHCP Server: 192.168.1.10
Option 53: DHCP Offer
Option 54: Server Identifier (192.168.1.10)
Option 66: TFTP Server (192.168.1.10) ← PXE ROM이 이 주소로 접속
Option 67: pxelinux.0 ← 이 파일 다운로드
dnsmasq 설정 예시:
# Option 66 (next-server)
dhcp-boot=pxelinux.0,pxeserver,192.168.1.10
# ↑ Option 67 ↑ 서버명 ↑ Option 66
# 또는 명시적으로
dhcp-option=66,192.168.1.10
dhcp-option=67,pxelinux.0
ISC DHCP 설정 예시:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
next-server 192.168.1.10; # Option 66
filename "pxelinux.0"; # Option 67
}
UEFI PXE vs Legacy PXE¶
차이점:
| 구분 | Legacy PXE (BIOS) | UEFI PXE |
|---|---|---|
| 펌웨어 | BIOS (1980년대) | UEFI (2000년대 이후) |
| 부트로더 | pxelinux.0 (SYSLINUX) | grubx64.efi (GRUB2) |
| 아키텍처 | 16비트 리얼 모드 | 64비트 프로텍티드 모드 |
| 파티션 방식 | MBR (2TB 제한) | GPT (무제한) |
| 보안 부팅 | 미지원 | Secure Boot 지원 |
| 네트워크 스택 | PXE ROM (느림) | UEFI HTTP Boot (빠름) |
| 부팅 속도 | 느림 (BIOS POST) | 빠름 |
| Option 67 | pxelinux.0 | grubx64.efi 또는 shimx64.efi |
UEFI HTTP Boot (iPXE):
UEFI PXE는 TFTP 대신 HTTP로 직접 부팅 가능:
1. DHCP → IP 할당 + HTTP 서버 주소
2. HTTP GET http://192.168.1.10/grubx64.efi
3. HTTP GET http://192.168.1.10/ubuntu-24.04.4.iso
→ TFTP보다 10배 이상 빠름
최신 서버 동향:
| 서버 세대 | 기본 부팅 모드 | 비고 |
|---|---|---|
| 2015년 이전 | Legacy BIOS | Dell 12세대, HP Gen8 이하 |
| 2015-2020 | UEFI | Dell 13-14세대, HP Gen9-Gen10 |
| 2020년 이후 | UEFI Only (Legacy 제거) | Dell 15세대+, HP Gen10+ |
PXE 서버 설정 (UEFI + Legacy 동시 지원):
# dnsmasq - 클라이언트 아키텍처에 따라 다른 부트로더 제공
dhcp-match=set:efi-x86_64,option:client-arch,7 # UEFI x64
dhcp-match=set:efi-x86_64,option:client-arch,9 # UEFI x64 (HTTP)
dhcp-match=set:bios,option:client-arch,0 # Legacy BIOS
dhcp-boot=tag:efi-x86_64,grubx64.efi,pxeserver,192.168.1.10
dhcp-boot=tag:bios,pxelinux.0,pxeserver,192.168.1.10
TFTP 디렉터리 구조 (UEFI + Legacy):
/var/lib/tftpboot/
├── pxelinux.0 # Legacy 부트로더
├── ldlinux.c32
├── grubx64.efi # UEFI 부트로더
├── shimx64.efi # Secure Boot용 Shim
├── pxelinux.cfg/
│ └── default # Legacy 부팅 메뉴
└── grub/
└── grub.cfg # UEFI 부팅 메뉴
PXE 서버 구성 예시¶
DHCP 설정 (dnsmasq):
# /etc/dnsmasq.conf
interface=eth0
dhcp-range=192.168.1.100,192.168.1.200,12h
dhcp-boot=pxelinux.0,pxeserver,192.168.1.10
enable-tftp
tftp-root=/var/lib/tftpboot
TFTP 디렉터리 구조:
/var/lib/tftpboot/
├── pxelinux.0 # SYSLINUX 부트로더
├── ldlinux.c32 # 라이브러리
├── pxelinux.cfg/
│ └── default # 부팅 메뉴 설정
└── ubuntu-24.04/
├── vmlinuz # Linux 커널
└── initrd.img # 초기 램디스크
부팅 메뉴 (pxelinux.cfg/default):
DEFAULT ubuntu-install
LABEL ubuntu-install
KERNEL ubuntu-24.04/vmlinuz
APPEND initrd=ubuntu-24.04/initrd.img ip=dhcp url=http://192.168.1.10/ubuntu-24.04.4-server.iso autoinstall ds=nocloud-net;s=http://192.168.1.10/preseed/
자동 설치 (Preseed/Cloud-init):
# /var/www/html/preseed/user-data
#cloud-config
autoinstall:
version: 1
locale: en_US.UTF-8
keyboard:
layout: us
storage:
layout:
name: lvm
identity:
hostname: gpu-node-01
username: ubuntu
password: $6$hashed_password
ssh:
install-server: true
packages:
- nvidia-driver-550
- cuda-toolkit-12-4
- docker.io
late-commands:
- echo "GRUB_CMDLINE_LINUX_DEFAULT=\"quiet splash intel_iommu=on iommu=pt\"" > /target/etc/default/grub
- curtin in-target --target=/target -- update-grub
IPMI vs PXE 비교¶
| 구분 | IPMI | PXE |
|---|---|---|
| 목적 | 서버 하드웨어 원격 관리 및 제어 | 네트워크 부팅을 통한 OS 설치/배포 |
| 동작 계층 | BMC - 독립적인 칩 | BIOS/UEFI 펌웨어 기능 |
| 네트워크 | 전용 관리 포트 (Out-of-Band) | 일반 NIC (In-Band) |
| 전원 상태 | 서버 꺼져 있어도 동작 (대기 전원만 필요) | 서버 켜져 있어야 함 (부팅 시점) |
| 사용 사례 | 서버 전원 제어, 콘솔 접근, 센서 모니터링, ISO 마운트 | 대량 서버 자동 설치, 디스크리스 부팅 |
| 확장성 | 서버 1대당 1개 BMC (1:1) | DHCP/TFTP 서버 1개로 수백 대 관리 (1:N) |
| 의존성 | 독립 동작 (OS 무관) | DHCP, TFTP, HTTP/NFS 서버 필요 |
| 대표 구현 | Supermicro IPMI, MegaRAC (AMI), XClarity (Lenovo) | MAAS, Cobbler, Foreman, Ironic |
실습: PXE 재설치¶
환경:
-
PXE 서버: 192.168.1.10 (DHCP + TFTP + HTTP)
-
설치 대상: 동일 서버 (IPMI로 설치했던 것)
-
자동화: Cloud-init autoinstall
과정:
- 1: BIOS 진입 (F2 또는 Del) → Boot Sequence 변경
- 2: Network Boot (PXE IPv4) → 1순위로 이동 → Save & Exit
- 3: 재부팅 → PXE ROM 실행
- 4: DHCP → IP 할당 받음 (192.168.1.150)
- 5: TFTP → pxelinux.0 다운로드
- 6: TFTP → vmlinuz + initrd 다운로드
- 7: 커널 부팅 → HTTP에서 ISO + preseed 받아서 자동 설치
- 8: 10분 후 설치 완료, 재부팅
- 9: 로컬 디스크에서 부팅 (PXE 건너뜀)
자동 설치 검증:
ssh ubuntu@192.168.1.150
cat /etc/hostname
# gpu-node-01
dpkg -l | grep nvidia-driver
# nvidia-driver-550
cat /proc/cmdline
# ... intel_iommu=on iommu=pt ...
핵심 요약¶
| 구분 | IPMI | PXE |
|---|---|---|
| 한 줄 정의 | 서버 하드웨어를 원격으로 제어하는 독립 칩 | 네트워크에서 부팅해서 OS를 자동 설치하는 메커니즘 |
| 언제 쓰나 | 서버 1~10대, 긴급 복구, OS 없이 제어 | 대규모 클러스터 구축, 동일 이미지 대량 배포 |
| 필수 조건 | BMC 관리 포트 + 대기 전원 | DHCP/TFTP/HTTP 서버 + 네트워크 부팅 활성화 |
| 장점 | 간단, OS 무관, 하드웨어 직접 제어 | 자동화, 확장성, 설정 일관성 |
| 단점 | 확장성 없음, 수동 작업 | 인프라 복잡도, 네트워크 의존성 |
실전 조합:
-
IPMI로 100대 서버 전원 켜기 (스크립트로 자동화)
-
PXE로 동시에 Ubuntu 24.04.4 + NVIDIA 드라이버 설치
-
설치 완료 후 Ansible로 추가 설정 (K8s, DOCA-OFED, ROCm)
-
문제 생기면 IPMI로 개별 서버 디버깅