큐레이션 요약
코어 유닛 부팅 시간을 몇 시간에서 몇 분으로 단축한 방법
Cloudflare의 핵심 서버가 펌웨어 업데이트 후 부팅에 최대 4시간 걸린 원인은 펌웨어 자체의 치명적 오류가 아니라, UEFI가 네트워크 부트 인터페이스를 순차적으로 탐색하며 각 실패마다 긴 타임아웃을 기다렸기 때문이었다. 서버는 실제로 사용할 IPv6 HTTPS 부트에 도달하기 전에 IPv4 HTTPS와 IPv4 iPXE를 반복 시도했고, 이 과정이 여러 번의 재부팅에 누적됐다. Cloudflare는 하드웨어별 올바른 부트 인터페이스를 사전에 지정하고 설정 검증·재적용 절차를 추가해 이후 부팅 시간을 약 20분에서 1분 이하로 줄였다.
네트워크 부트 인터페이스의 역할
- 중앙 데이터센터의 Cloudflare 코어 서버는 운영체제를 로컬 디스크가 아니라 네트워크를 통해 부팅하는 경우가 많다.
- 주요 네트워크 부트 방식은 다음과 같다.
- PXE: 서버가 네트워크에서 부트 환경을 받아오는 전통적인 방식
- UEFI HTTPS Boot: UEFI 펌웨어가 HTTPS를 통해 운영체제 파일을 직접 다운로드하는 방식
- Cloudflare는 오픈소스 네트워크 부트 펌웨어인 iPXE를 사용한다.
- HTTP·HTTPS를 지원한다.
- 하드웨어 구성별 프로비저닝과 자동화된 서버 배포를 스크립트로 처리할 수 있다.
- 서버와 네트워크 카드의 종류, 용도에 따라 실제로 사용해야 하는 네트워크 부트 인터페이스가 달랐다.
원인: 모든 인터페이스를 순차 검색한 선형 탐색
- 펌웨어 업데이트 이후 서버가 운영체제 시작 단계에 도달하지 못하고 장시간 멈췄다.
- 직렬 콘솔을 확인한 결과 POST와 하드웨어 초기화는 정상적으로 완료됐다.
- 문제는 네트워크 부트 단계에서 발생했다.
- IPv4 HTTPS Boot 시도
- 약 5분간 타임아웃 대기
- IPv4 iPXE 시도
- 다시 타임아웃 대기
- 같은 탐색을 반복
- 마지막에 실제로 성공하는 IPv6 HTTPS Boot 실행
- 각 실패한 인터페이스마다 약 5분이 소요됐다.
- 올바른 인터페이스에 도달하기 전 네 번의 시도가 누적되면서 한 번의 부팅에 약 20분이 낭비됐다.
- 펌웨어 업그레이드는 구성요소별로 여러 차례 재부팅을 필요로 하므로, 서버 한 대당 대기 시간이 거의 4시간까지 늘어났다.
- 신규 서버도 첫 부팅부터 같은 타임아웃을 겪어 전체 배포와 유지보수 일정이 지연됐다.
해결 방향: 사용할 부트 인터페이스를 미리 지정
- 핵심 해결책은 UEFI가 모든 인터페이스를 추측하며 검색하지 않도록, 하드웨어와 사용 사례에 맞는 네트워크 부트 인터페이스 순서를 미리 선언하는 것이었다.
- Cloudflare는 부트 자동화 흐름을 다음 세 단계로 나눠 관리했다.
- UEFI 펌웨어 초기화
- PXE 기반 프리부트 단계
- 커널 시작
- 네트워크 인터페이스 순서를 프리부트 PXE 단계 초기에 설정하도록 자동화 순서를 변경했다.
- 그 결과 펌웨어 업그레이드 과정에서 반복되던 네트워크 부트 탐색 시간을 줄여 전체 작업 시간을 약 한 시간 단축했다.
- 이후의 일반적인 재부팅은 기존 약 20분에서 1분 이하로 감소했다.
레거시 UEFI와 설정 초기화 문제
- 부트 순서를 지정하는 과정에는 두 가지 제약이 있었다.
- 오래된 UEFI 버전에서는 부트 순서 설정 자체가 지원되지 않았다.
- UEFI 펌웨어를 업데이트하면 부트 순서 설정이 초기화되는 경우가 있었다.
- 이를 해결하기 위해 자동화 과정에 상태 검증 단계를 추가했다.
- 설정 변경 후 실제 펌웨어 상태를 확인한다.
- 설정이 사라졌거나 변경되었으면 원하는 값을 다시 적용한다.
- 필요한 경우 재부팅해 새 설정을 적용한다.
- 첫 부팅에는 검증과 재적용 때문에 약간의 추가 시간이 들 수 있지만, 이후 부팅마다 반복되는 긴 인터페이스 탐색을 제거할 수 있었다.
벤더가 비활성화한 네트워크 부트 순서 설정
- 자동화 프로그램이 네트워크 부트 우선순위를 읽지 못하는 또 다른 문제가 있었다.
- UEFI의 네트워크 부트 설정은
EFI_IFR_REF3구조로 관리되고 있었으며, 필요할 때까지 실제 데이터가 생성되지 않는 지연 로딩(lazy loading) 방식이었다. - 이 구조는 BIOS 부팅 시간을 줄이는 데는 도움이 되지만, GUI에서 해당 항목을 직접 열지 않으면 프로그램이 설정 정보를 발견할 수 없게 만들었다.
- 그 결과 자동화 도구의 펌웨어 스캔에서 “Network Boot Interface” 항목이 보이지 않았다.
- Cloudflare는 하드웨어 벤더와 협력해 고정된 “Boot Order Module”에서 관련 토큰을 활성화했다.
- 이 설정은 GUI를 수동으로 열지 않아도 부팅 과정에서 네트워크 부트 인터페이스가 검색·초기화되도록 만들었다.
실용적으로는 네트워크 부트를 사용하는 서버에서 모든 인터페이스를 무조건 탐색하게 두기보다, 하드웨어별 유효한 인터페이스를 명시하고 부팅 후 설정이 유지되는지 자동 검증하는 것이 중요하다. 특히 펌웨어 업데이트처럼 여러 번 재부팅하는 작업에서는 인터페이스 하나당 타임아웃이 전체 유지보수 시간을 크게 늘릴 수 있으므로, UEFI 설정의 지속성·레거시 호환성·벤더별 표현 차이까지 함께 자동화해야 한다.