VMware Rocky 9.6 템플릿 생성 가이드 v3.1
이 문서는 Rocky Linux 9.6 Vagrant VMware 이미지를 vCenter 템플릿으로 변환하고, 신규 VM 생성 시 cloud-init을 통해 네트워크 설정 및 LVM 기반 루트 디스크 자동 확장이 정상 적용되도록 구성하는 절차를 안내합니다.
📌 핵심 전제 사항
- 네트워크 관리:
NetworkManager를 사용하여 네트워크 설정을 제어합니다. - Datasource 허용: VMware datasource로
VMware및OVF를 허용하도록 제한합니다. - 디스크 파티션 구조: 루트 디스크 구조는
/dev/sda3LVM PV 위에/dev/mapper/rl-root가 마운트된 구성을 기준으로 합니다. - 파티션 확장: cloud-init
growpart모듈이 LVM PV 파티션(/dev/sda3) 확장을 담당합니다. - LVM 확장 서비스:
resize-lvm-root.service를 구성하여 LVM PV/LV 및/파일시스템 확장을 담당합니다. - 첫 부팅(First Boot) 보장: 템플릿 변환 직전에
cloud-init clean --logs --machine-id명령과 machine-id 초기화를 수행하여 새 VM이 최초 부팅 상태로 정상 인식되도록 합니다. - 네트워크 잔재 정리: 템플릿 생성 과정에서 생성된 NetworkManager connection 정보를 삭제하여, 새 VM이 템플릿 VM의 IP 설정을 그대로 물고 올라오는 문제를 방지합니다.
1. OVF 이미지 준비 및 변환
1.1 이미지 다운로드
인터넷이 가능한 환경에서 Rocky Linux 아카이브 스토리지로부터 VMware 가상화용 최신 Box를 다운로드합니다.
* 다운로드 경로: Rocky Linux Vault - x86_64 이미지
* 대상 파일: Rocky-9-Vagrant-VMware.latest.x86_64.box
1.2 압축 해제
Vagrant Box는 tar 압축 파일 형식을 취하고 있습니다. 확장자를 변경하여 내부에 포함된 가상 머신 구성 파일(.vmx)을 추출합니다.
mv Rocky-9-Vagrant-VMware.latest.x86_64.box Rocky-9-Vagrant-VMware.latest.x86_64.tar.gz
tar xvf Rocky-9-Vagrant-VMware.latest.x86_64.tar.gz
ls -al *.vmx
1.3 변환 도구 설치
vmx 파일을 vCenter 업로드에 필요한 OVF 형식으로 변환하기 위해 Broadcom 개발자 사이트에서 ovftool을 다운로드하여 설치합니다.
* 도구 획득 경로: Broadcom OVF Tool 다운로드 링크
1.4 OVF 변환
터미널에서 아래 명령을 실행하여 vmx 구성 파일을 ovf 파일로 변환합니다.
2. vCenter 업로드 및 하드웨어 설정
2.1 템플릿 업로드
vCenter 관리 콘솔에서 OVF 템플릿 배포 기능을 사용하여 생성된 Rocky-9-Template.ovf 파일을 업로드합니다.
2.2 설정 편집
운영 기준 및 용도에 맞게 하드웨어 가상화 스펙을 조정합니다.
1. 네트워크 어댑터: 추가 후 어댑터 유형을 고성능 드라이버 방식인 VMXNET3으로 변경합니다.
2. 부팅 옵션: 가상 펌웨어 부팅 옵션을 BIOS로 변경합니다.
3. CPU, 메모리, 디스크: 타겟 운영 기준에 맞게 조정합니다.
[!WARNING] 루트 디스크 파티션 위치 주의 디스크 자동 확장은 확장 대상 루트 PV 파티션이 대상 디스크의 마지막 파티션(연속된 디스크 공간 바로 앞)에 위치해야 안정적으로 동작합니다.
이 가이드는 아래의 디스크 레이아웃 구조를 기준으로 설명합니다.
/dev/sda
├─ sda1 /boot/efi
├─ sda2 /boot
└─ sda3 LVM PV
├─ /dev/mapper/rl-root /
└─ /dev/mapper/rl-swap swap
3. VM 전원 켜기 및 기본 접속
가상 머신의 전원을 켜고 기본 Vagrant 계정을 사용하여 로그인합니다.
* 사용자: vagrant
* 비밀번호: vagrant
구동 직후 필수 서비스들의 가동 상태를 확인합니다.
서비스가 설치되어 있지 않거나 비활성화되어 있더라도 아래 필수 패키지 설치 및 활성화 단계에서 정리되므로 계속 진행합니다.4. 임시 네트워크 설정
필수 패키지 다운로드를 위해 외부 인터넷 접속 또는 내부 RPM 미러 저장소 접근이 가능한 임시 네트워크를 nmcli 명령어로 구성합니다.
sudo nmcli connection show
# 연결 이름이 "Wired connection 1"인 경우 IP/Gateway/DNS 수동 지정 예시
sudo nmcli connection modify "Wired connection 1" \
ipv4.addresses x.x.x.x/x \
ipv4.gateway x.x.x.x \
ipv4.dns x.x.x.x \
ipv4.method manual
sudo nmcli connection up "Wired connection 1"
인터넷 또는 내부망 접근성을 검증합니다.
5. 필수 패키지 설치
VMware 템플릿 기동, cloud-init 통합 및 LVM 루트 확장에 필요한 핵심 패키지들을 설치합니다.
sudo dnf install -y \
cloud-init \
cloud-utils-growpart \
open-vm-tools \
NetworkManager \
openssh-server \
xfsprogs \
lvm2
패키지 역할 요약
cloud-init: VM 최초 부팅 시 user-data, network-config, disk resize 설정을 자동 반영합니다.cloud-utils-growpart: 디스크 크기 증가 시 해당 파티션을 확장하는growpart도구를 제공합니다.open-vm-tools: VMware guest integration 및 OS Customization을 원활하게 지원합니다.NetworkManager: cloud-init 네트워크 설정을 파싱 및 렌더링하는 대상입니다.openssh-server: 배포 후 원격 SSH 접속을 지원합니다.xfsprogs: XFS 파일시스템 온라인 확장 도구(xfs_growfs)를 제공합니다.lvm2: LVM 볼륨 그룹(VG) 및 논리 볼륨(LV) 제어 도구를 제공합니다.
설치 완료 후 필수 명령어 파일들의 확보 상태를 교차 검사합니다.
rpm -q cloud-init cloud-utils-growpart open-vm-tools NetworkManager openssh-server xfsprogs lvm2
command -v growpart
command -v pvresize
command -v lvextend
command -v xfs_growfs
cloud-utils-growpart가 유실된 경우 cloud-init 로그에 growpart unable to find resizer for 'auto': No resizers available 오류가 발생하며 디스크 파티션 확장이 실패하게 됩니다.
6. 디스크 구조 확인
현재 Rocky 템플릿의 디스크 파티션 레이아웃 상태를 파악합니다.
정상 디스크 조건 기준
/dev/sda3(또는 실제 대상 파티션)가 LVM PV로 잡혀 있어야 합니다./dev/mapper/rl-root논리 볼륨이/경로에 마운트되어 있어야 합니다.- 루트 LVM PV 파티션이 대상 디스크
/dev/sda의 가장 마지막 물리 파티션이어야 합니다. - 새 VM 배포 시 가상 디스크 크기를 키웠을 때, LVM PV 파티션 바로 뒤쪽에
Free Space연속 공간이 유입될 수 있는 파티션 구조여야 합니다.
7. cloud-init NetworkManager renderer 지정
cloud-init이 감지한 네트워크 설정 구성을 시스템의 NetworkManager 형식으로 렌더링하도록 드롭인 설정 파일을 작성합니다.
sudo tee /etc/cloud/cloud.cfg.d/99-network-renderer.cfg >/dev/null <<'EOF'
system_info:
network:
renderers: ['network-manager']
EOF
8. VMware datasource 설정
VMware Guest OS Customization 또는 vCenter GuestInfo 인터페이스를 통해 전달받는 cloud-init 데이터를 처리할 수 있도록 datasource 목록을 구성합니다.
sudo tee /etc/cloud/cloud.cfg.d/99_vmware.cfg >/dev/null <<'EOF'
datasource_list: [ VMware, OVF, None ]
datasource:
VMware:
allow_raw_data: true
allow_update_network: true
network_config:
encoding: base64
variable: network
EOF
9. cloud-init growpart 설정
LVM 구조에서는 cloud-init이 / 파일시스템 자체를 곧바로 리사이즈할 수 없습니다. 따라서 LVM PV가 올라간 하부의 물리 파티션인 /dev/sda3를 1차적으로 팽창시키도록 드롭인 파일에 타겟 디바이스를 명시합니다.
루트 파티션 장치명 확인 및 가변 대응 필수
본 표준 가이드는 /dev/sda3가 LVM PV 파티션인 구성을 기본 모델로 작성되었습니다. 하지만 배포 환경에 따라 루트 PV 파티션 명칭이 sda3가 아닌 sda4 또는 sdb1 등 다를 수 있습니다.
반드시 sudo parted /dev/sda unit MiB print free 명령어로 본인 환경의 루트 LVM PV 물리 파티션 번호(예: sda3, sda4 등)를 직접 검증하신 뒤, 아래 설정 파일의 devices: ['/dev/sda3'] 설정값과 이후 단계의 리사이즈 쉘 스크립트 내부 파티션 경로를 환경에 맞춰 변경하십시오.
sudo tee /etc/cloud/cloud.cfg.d/98-growpart-resizefs.cfg >/dev/null <<'EOF'
growpart:
mode: auto
devices: ['/dev/sda3']
ignore_growroot_disabled: true
resize_rootfs: true
EOF
혹시 기존 이미지에 growroot 비활성화 태그 파일이 남아있을 경우 수동 제거합니다.
작성된 드롭인 설정을 확인합니다.
참고: 이전 버전 안내서에서는
devices: ['/']형식으로 마운트 루트 기준 확장을 진행했습니다. LVM을 거치지 않는 일반 단일 파티션 루트 구성이라면 해당 방식으로 충분하지만,/경로가 LVM Logical Volume인 가이드 기준 환경에서는 물리 파티션 확장(growpart) 단계와 LVM 확장 단계를 완전히 분리하여 수동 조치하는 편이 훨씬 명확하고 확실합니다.
10. LVM 루트 확장 스크립트 추가
물리 파티션 팽창 직후 LVM의 물리 볼륨(PV)을 감지하고, 볼륨 그룹(VG) 및 논리 볼륨(LV)을 최대로 늘려 XFS 파일시스템 용량까지 일괄적으로 팽창시켜 주는 확장 자동화 스크립트를 작성합니다.
sudo tee /usr/local/sbin/resize-lvm-root.sh >/dev/null <<'EOF'
#!/bin/bash
set -euo pipefail
# 1. 대상 물리 파티션(sda 3)을 잔여 디스크 크기만큼 확장 (실제 디스크 환경에 맞게 파티션 번호 조정 필수)
growpart /dev/sda 3 || true
# 2. LVM 물리 볼륨 크기 정보 갱신
pvresize /dev/sda3
# 3. / 경로가 올라간 논리 볼륨을 잔여 VG 공간의 100%만큼 늘리고 파일시스템 온라인 확장(-r) 실행
lvextend -r -l +100%FREE /dev/mapper/rl-root || true
# 4. 실행 완료 상태 보존 파일 생성
touch /var/lib/resize-lvm-root.done
EOF
sudo chmod 0755 /usr/local/sbin/resize-lvm-root.sh
실행 프로세스 흐름
/dev/sda 가상 디스크 용량 증가
➡️ growpart /dev/sda 3 실행으로 물리 파티션 증가
➡️ pvresize /dev/sda3 실행으로 LVM PV 공간 팽창
➡️ lvextend -r -l +100%FREE /dev/mapper/rl-root 실행으로 LV 팽창 및 / 파일시스템 크기 동기화 완료
➡️ 완료 플래그 파일(/var/lib/resize-lvm-root.done) 생성
11. 첫 부팅용 systemd 서비스 추가
새로운 가상 머신 배포 시 최초 1회(First Boot)만 상기 LVM 리사이즈 스크립트가 호출되도록 systemd 일시 가동(oneshot) 서비스 유닛 파일을 등록합니다.
sudo tee /etc/systemd/system/resize-lvm-root.service >/dev/null <<'EOF'
[Unit]
Description=Resize LVM root filesystem on first boot
After=local-fs.target
ConditionPathExists=!/var/lib/resize-lvm-root.done
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/resize-lvm-root.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
systemd 데몬을 재로드하고 작성한 리사이즈 서비스를 부팅 기본 동작으로 활성화합니다.
⚠️ 주의 사항: 서비스 실행 순서 지정 시
After=cloud-init.target이나Wants=cloud-init.target같은 cloud-init에 대한 직접적인 종속성을 강제 지정하지 마십시오. 실제 부팅 파이프라인에서 예기치 못한 순환 참조 교착 상태(ordering cycle)가 발생하여 서비스 기동이 정지될 수 있으므로, 단순하고 명확하게After=local-fs.target시점에 돌도록 고정합니다.
12. 이전 버전 runcmd 설정 정리
이전 빌드 절차에서 사용했던 cloud-init 내부 runcmd 기반의 LVM 루트 디스크 리사이즈 드롭인 파일이 남아 있을 경우, 중복 호출 및 충돌 방지를 위해 사전에 깔끔히 삭제합니다.
13. cloud-init 모듈 및 설정 검증
/etc/cloud/cloud.cfg 기본 본체 파일 안에 growpart와 resizefs 모듈 키워드가 정상 등록되어 작동 가능한지 그랩하여 체크합니다.
정상 출력 스냅샷 예시
추가한 드롭인 설정의 문법 및 YAML 포맷 유효성에 대해 cloud-init 스키마 검증 도구로 무결성을 스캔합니다.
sudo cloud-init schema --system
sudo cloud-init schema --config-file /etc/cloud/cloud.cfg.d/98-growpart-resizefs.cfg --annotate
cloud-init schema --system은 현재 가상 머신의 로컬에 보관된 user-data 및 network-config 등을 참조하여 분석합니다.
14. 필수 서비스 최종 활성화
부팅 시 기동되어야 하는 코어 데몬 및 가상화 관리 툴들을 모두 활성화하고 동작 상태를 확인합니다.
sudo systemctl enable --now cloud-init
sudo systemctl enable --now vmtoolsd
sudo systemctl enable --now NetworkManager
sudo systemctl enable --now sshd
systemctl status cloud-init vmtoolsd NetworkManager sshd --no-pager
15. 모니터링 에이전트 (Node Exporter) 설치
통합 성능 지표 모니터링 관리를 위해 대상 템플릿에 Node Exporter를 탑재합니다.
- 대상 장비에 SSH 접속 후
node_exporter-1.7.0.tar.gz설치 자산을 업로드합니다. - 압축을 풀고 패키지에 동봉된 자동 설치 스크립트를 관리자 권한으로 가동합니다.
- 설치 스크립트가 systemd 유닛 파일 등록 및 서비스 구동까지 마쳤는지 최종적으로 검사합니다.
- 로컬 포트 포워딩 또는 curl 조회를 통해 9100 메트릭 노출 포트 응답을 확인합니다.
16. 네트워크 인터페이스 명칭 고정
vCenter 게스트 커스터마이제이션 및 CMP 솔루션에서 대상 VM으로 예측 가능한 IP 주입 제어를 수행할 수 있도록, 디바이스 명칭을 eth0, eth1 등의 순차적 고정 규칙으로 강제 매핑합니다.
16.1 grub 커널 부팅 명령행 파라미터 튜닝
/etc/default/grub 파일의 GRUB_CMDLINE_LINUX 지시어 마지막 우측 끝부분에 net.ifnames=0 biosdevname=0 파라미터를 추가하여 수동 기입합니다. (기존 설정값이 있다면 지우지 말고 맨 뒤에 스페이스 공백으로 이어서 기입합니다.)
설정에 맞춰 grubby 도구를 가동해 실행 커널 설정에 한 번 더 주입합니다.
16.2 GRUB 환경 부팅 설정 파일 재빌드
가상 머신의 부팅 모드 방식(BIOS vs UEFI)을 점검한 뒤 알맞은 타겟 위치로 GRUB 설정을 컴파일 빌드합니다.
- BIOS(Legacy) 부팅 방식인 경우:
- UEFI 부팅 방식인 경우:
변경 사항 조치를 위해 가상 머신을 1회 재부팅합니다.
재기동이 완료된 후, 물리 어댑터 명칭이 예측한 규칙대로 매핑되었는지 질의합니다.
출력 결과에eth0 등의 장치가 정상적으로 표시되는지 파악합니다.
17. 템플릿 변환 전 최종 점검
가상 머신 템플릿 락을 걸기 전 디바이스, 설정, 리사이즈 서비스 가동 상태를 교차 체킹합니다.
# 1. 필수 패키지 및 명령어 파일 확인
rpm -q cloud-init cloud-utils-growpart open-vm-tools NetworkManager openssh-server xfsprogs lvm2
command -v growpart && command -v pvresize && command -v lvextend && command -v xfs_growfs
# 2. cloud-init 렌더러 및 datasource 설정 스캔
sudo grep -RniE 'datasource_list|VMware|growpart|resize_rootfs|network-manager' \
/etc/cloud/cloud.cfg /etc/cloud/cloud.cfg.d
# 3. LVM 리사이즈 서비스 정상 등록 상태 점검
sudo systemctl is-enabled resize-lvm-root.service
sudo ls -l /usr/local/sbin/resize-lvm-root.sh
sudo find /etc/systemd/system -lname '*resize-lvm-root.service' -ls
템플릿 변환 완료 기준
resize-lvm-root.service의 상태가enabled여야 합니다.multi-user.target.wants경로 하위에 심볼릭 링크가 존재해야 합니다./usr/local/sbin/resize-lvm-root.sh파일에 실행 권한(0755)이 주어져 있어야 합니다.- [중요] 테스트 중 생성되었을 수 있는 완료 태그 플래그 파일인
/var/lib/resize-lvm-root.done가 존재하지 않는 깨끗한 상태여야 합니다. (태그 파일이 있으면 실제 배포 후 첫 부팅 시 리사이즈 스크립트 실행이 생략됩니다.)
18. nmcli connection 정리
가상 머신 내부에 네트워크 매핑 흔적(UUID 및 고정 IP 정보 등)이 커넥션 프로파일에 남아있으면, 배포 후 새 VM이 템플릿 VM의 네트워크 정보와 충돌하거나 꼬이는 원인이 됩니다. 따라서 변환 직전 NM 관리 프로파일들을 모조리 정리 소거합니다.
# 1. 현재 매핑된 NM 연결 프로파일 확인
sudo nmcli connection show
# 2. 확인된 기존 접속 프로파일 일괄 제거 (대상 명칭에 맞춰 순차적 삭제)
sudo nmcli connection delete "cloud-init eth0" 2>/dev/null
sudo nmcli connection delete "System eth0" 2>/dev/null
sudo nmcli connection delete "System ens34" 2>/dev/null
sudo nmcli connection delete "1" 2>/dev/null
sudo nmcli connection delete "temp-eth1" 2>/dev/null
sudo nmcli connection delete "Wired connection 1" 2>/dev/null
# 3. 물리적인 NetworkManager 연결 설정 구성 프로파일 파일들까지 확실하게 영구 소거
sudo rm -f /etc/NetworkManager/system-connections/*.nmconnection
sudo rm -f /run/NetworkManager/system-connections/*.nmconnection
# 4. 서비스 재기동을 통한 메모리 상태 초기화
sudo systemctl restart NetworkManager
19. 템플릿 초기화 및 종료
새 VM 배포 시 cloud-init이 오차 없이 완전한 최초 구동 단계로 인식하여 metadata/network-config 초기 동작을 보장받도록, 시스템 사용 흔적과 캐시, 고유 머신 식별자(machine-id) 정보를 완전하게 말소한 뒤 즉각 종료를 수행합니다.
# 1. 최종 디스크 리사이즈 스크립트 실행 태그 파일 확인 및 소거
sudo rm -f /var/lib/resize-lvm-root.done
# 2. cloud-init 캐시 로그 지우고 머신 고유 ID 초기화 트리거 실행
sudo cloud-init clean --logs --machine-id
# 3. 로컬 cloud 라이브러리 캐싱 데이터 지우기
sudo rm -rf /var/lib/cloud/*
# 4. machine-id 내용물 비우기 (파일 자체는 존재하나 크기는 0으로 유지)
sudo truncate -s 0 /etc/machine-id
sudo rm -f /var/lib/dbus/machine-id
# 5. 마지막 한 번 더 잔여 네트워크 커넥션 프로파일 소거 확인
sudo rm -f /etc/NetworkManager/system-connections/*.nmconnection
# 6. 시스템 저널 로그 및 임시 temp 영역 청소
sudo journalctl --vacuum-time=0
sudo rm -rf /tmp/*
# 7. 본 초기화 세션의 쉘 실행 흔적 말소 후 전원 오프
history -c
history -w
sudo poweroff
가상 머신의 전원이 완전히 꺼지면, vCenter 웹 콘솔로 이동하여 해당 VM 항목을 우클릭하고 템플릿 -> 템플릿으로 변환(Convert to Template)을 적용하여 패키지 포맷 락을 완료합니다.
20. 새 VM 배포 후 동작 검증
본 템플릿을 소스로 삼아 신규 가상 머신을 프로비저닝할 때, 가상 디스크 1 용량을 기본 이미지 크기보다 더 큰 크기(예: 110G 또는 120G)로 임의 지정하여 생성합니다.
부팅이 시작되면 cloud-init이 프로비저닝 완료 상태가 될 때까지 쉘 프롬프트 대기 명령어로 관찰합니다.
가이드 프로세스에 따라 디스크 파티션, LVM, 물리 및 논리 볼륨 그룹 및 파일시스템 크기가 정상 증설 완료되었는지 최종 진단합니다.
# 1. 마운트 및 물리 디바이스 용량 팽창 검사
lsblk
df -hT /
findmnt -no SOURCE,FSTYPE,SIZE,USED,AVAIL /
sudo pvs
sudo vgs
sudo lvs
# 2. 신설한 리사이즈 systemd 서비스 가동 로그 검사
sudo systemctl status resize-lvm-root.service --no-pager
sudo journalctl -u resize-lvm-root.service -b --no-pager
# 3. growpart 및 파일시스템 리사이저 내부 구동 패턴 로그 정밀 점검
sudo grep -Ei 'growpart|resizefs|resize_rootfs|growroot|NOCHANGE|FAILED|ERROR|WARN' \
/var/log/cloud-init.log /var/log/cloud-init-output.log
정상 실행 흐름 시나리오 확인
가상 디스크 sda 용량 확장 감색 감지
➡️ sda3 (또는 설정 타겟 파티션) 파티션 영역 확장
➡️ LVM 물리 볼륨 영역 확장 (pvresize /dev/sda3)
➡️ 논리 볼륨 및 파일시스템 확장 (lvextend -r -l +100%FREE /dev/mapper/rl-root)
➡️ /var/lib/resize-lvm-root.done 플래그 파일 자동 생성 완료 확인
21. 문제 해결 (Troubleshooting)
21.1 디스크 1 공간은 늘어났으나 / 경로 마운트 용량이 이전 크기 그대로인 경우
먼저 물리 디스크 가상 장치 뒤쪽에 Free Space 영역이 확보되어 들어와 있는지 확인합니다.
/dev/sda3 (루트 LVM PV) 뒤에 Free Space 여유 공간이 잡혀있는데도 LVM 볼륨 확장이 멈춰 있다면, 아래 필수 도구 명령어가 시스템 내부에 누락되었는지 다시 체크하십시오.
rpm -q cloud-utils-growpart lvm2 xfsprogs
command -v growpart && command -v pvresize && command -v lvextend && command -v xfs_growfs
누락 사항을 확인한 후, 가동 중인 새 VM 상태에서 아래 수동 리사이즈 파이프라인 명령을 순차 실행하여 정상 복구시킵니다.
# 1. 물리 파티션 공간 팽창
sudo growpart /dev/sda 3
# 2. PV 정보 갱신
sudo pvresize /dev/sda3
# 3. LV 및 XFS 파일시스템 갱신
sudo lvextend -r -l +100%FREE /dev/mapper/rl-root
# 4. 검증
lsblk && df -hT / && sudo pvs && sudo vgs && sudo lvs
21.2 growpart unable to find resizer for 'auto': No resizers available 오류 발생 시
해당 오류는 파티션을 강제 조절해 주는 핵심 쉘 유틸리티가 빌드 시 유실되었을 때 발생합니다. DNF 도구를 가동해 해당 팩을 주입하십시오.
21.3 새 VM 기동 시 cloud-init이 동작하지 않는 경우
템플릿 변환 직전 단계에서 machine-id 청소 및 cloud-init 캐시 리셋 명령어를 정상 실행하지 않아 이미 부팅이 한 차례 이루어진 장비라고 게스트 OS가 인지했기 때문일 가능성이 큽니다.
# 템플릿 변환 직전 machine-id 및 cloud-init 캐시를 강제 리셋했는지 검사하십시오.
sudo cloud-init clean --logs --machine-id
sudo rm -rf /var/lib/cloud/*
sudo truncate -s 0 /etc/machine-id
sudo rm -f /var/lib/dbus/machine-id
21.4 루트 PV 파티션이 디스크의 마지막 파티션 영역이 아닌 경우
growpart는 볼륨 팽창 대상 파티션 바로 뒷단에 어떠한 방해 물리 파티션도 없이 물리적 연속 Free Space 공간이 달라붙어 있어야 안전하게 늘어납니다.
21.5 새로 배포한 VM이 템플릿용 VM의 IP 주소를 그대로 가져가는 경우
템플릿화 잠금 직전 단계에서 NetworkManager connection 정보와 잔존 nmconnection 파일들을 완벽히 삭제하지 못해 캐싱 프로파일이 상속되어 기동되었을 가능성이 큽니다.
sudo nmcli connection show
sudo ls -al /etc/NetworkManager/system-connections/
sudo ls -al /run/NetworkManager/system-connections/
cloud-init clean 리셋 후 전원을 끄고 템플릿 락을 다시 거는 절차를 반복합니다.
22. 핵심 요약 결론
cloud-init growpart➡️ 물리 파티션 영역 확장 수행 (LVM PV 파티션/dev/sda3타겟팅)resize-lvm-root.service➡️ LVM 물리 볼륨, 볼륨 그룹, 논리 볼륨 및 XFS 파일시스템 확장 수행nmcli connection 삭제➡️ 템플릿 네트워크 바인딩 흔적 소거로 IP 꼬임 및 충돌 방지cloud-init clean + machine-id 초기화➡️ 배포 시 신규 VM이 오차 없이 최초 부팅 상태로 진입하도록 보장
23. 참고 문서 및 정보 링크
- cloud-init growpart 모듈: growpart 모듈 공식 사양
- cloud-init resizefs 모듈: resizefs 모듈 공식 사양
- cloud-init 파티션 및 파일시스템 확장 구성 예시: disk_setup 팽창 템플릿 가이드
- cloud-init VMware datasource 레퍼런스: VMware datasource 상세 명세