macOS 설치용 ISO 부팅 이미지 생성 가이드 - How to Create a Bootable macOS ISO for Installation
macOS를 VirtualBox, VMware, 또는 기타 가상 환경에서 설치하거나, USB로 부팅 가능한 디스크 이미지를 만들고 싶을 때, 애플에서 기본적으로 제공하는 .app 설치 프로그램은 바로 사용할 수 없습니다.
이럴 땐 직접 부팅 가능한 ISO 파일을 만들어야 합니다.
이번 글에서는 macOS 설치 앱에서 ISO 부팅 이미지를 자동으로 생성해주는 Bash 스크립트 기반 자동화 방법을 소개합니다.
[macOS Create Bootable ISO.sh]
#!/bin/bash
set -e
# ---------- 색상 메시지 함수 ----------
# 빨간 글씨 (info)
function info() { echo -e "\033[1;31m[INFO]\033[0m $1"; }
# 노란 글씨 (경고)
function warn() { echo -e "\033[1;33m[WARN]\033[0m $1"; }
# 흰 글씨 + 빨간 배경 (오류)
function error() { echo -e "\033[1;37;41m[ERROR]\033[0m $1"; }
# ---------- 설치 앱 검색 ----------
info "설치 가능한 macOS 앱을 검색 중..."
INSTALLERS=()
while IFS= read -r line; do
INSTALLERS+=("$line")
done < <(find /Applications -maxdepth 1 -type d -name "Install macOS *.app" | sort)
if [ ${#INSTALLERS[@]} -eq 0 ]; then
error "/Applications 경로에서 'Install macOS *.app'를 찾을 수 없습니다."
exit 1
fi
echo ""
echo "다음 중 ISO를 생성할 macOS 설치 앱을 선택하세요:"
IFS=$'\n'
select INSTALLER_APP in "${INSTALLERS[@]}"; do
if [ -n "$INSTALLER_APP" ]; then
break
else
echo "올바른 번호를 선택해주세요."
fi
done
unset IFS
APP_NAME=$(basename "$INSTALLER_APP" .app)
ISO_NAME="${APP_NAME// /}.iso"
DMG_NAME="/tmp/${APP_NAME// /}.cdr.dmg"
info "선택한 macOS 설치 앱: $INSTALLER_APP"
info "생성될 ISO 이름: $ISO_NAME"
# ---------- 디스크 이미지 크기 계산 ----------
INSTALLER_SIZE=$(du -sm "$INSTALLER_APP" | cut -f1)
OVERHEAD_SIZE=3072
DISK_SIZE=$(($INSTALLER_SIZE + $OVERHEAD_SIZE))
info "계산된 디스크 크기: $DISK_SIZE MB"
# ---------- 디스크 이미지 생성 ----------
info "디스크 이미지 생성 중..."
hdiutil create -o "$DMG_NAME" -size ${DISK_SIZE}m -layout SPUD -fs HFS+J
# ---------- 디스크 마운트 ----------
info "디스크 이미지 마운트 중..."
hdiutil attach "$DMG_NAME" -noverify -mountpoint /Volumes/install_build
# ---------- 설치 미디어 생성 ----------
info "'createinstallmedia' 실행 중..."
sudo "$INSTALLER_APP/Contents/Resources/createinstallmedia" --volume /Volumes/install_build --nointeraction
# ---------- 볼륨 경로 자동 탐지 ----------
info "설치 미디어 마운트 해제 준비 중..."
TARGET_VOLUME=""
for VOL in /Volumes/*; do
[[ -d "$VOL" ]] || continue
if [[ "$(basename "$VOL")" == Install\ macOS* ]]; then
TARGET_VOLUME="$VOL"
break
fi
done
if [ -z "$TARGET_VOLUME" ] || [ ! -d "$TARGET_VOLUME" ]; then
warn "자동 탐지 실패: 볼륨 경로를 감지하지 못했습니다."
info "수동으로 마운트된 볼륨 목록을 출력합니다."
VOLUMES=()
INDEX=1
for VOL in /Volumes/*; do
[ -d "$VOL" ] || continue
VOL_NAME=$(basename "$VOL")
echo " [$INDEX] $VOL_NAME"
VOLUMES+=("$VOL")
INDEX=$((INDEX + 1))
done
echo ""
while true; do
read -p "분리할 볼륨 번호를 선택하세요: " SEL
if [[ "$SEL" =~ ^[0-9]+$ ]] && [ "$SEL" -ge 1 ] && [ "$SEL" -le "${#VOLUMES[@]}" ]; then
TARGET_VOLUME="${VOLUMES[$((SEL-1))]}"
break
else
echo "올바른 번호를 입력하세요 (1 ~ ${#VOLUMES[@]})"
fi
done
echo ""
fi
info "선택된 볼륨: $TARGET_VOLUME"
echo "분리 시도 중..."
# ---------- 해제 루프 ----------
while ! hdiutil detach "$TARGET_VOLUME"; do
warn "$TARGET_VOLUME 분리에 실패했습니다. 강제 분리 시도..."
if ! diskutil unmount force "$TARGET_VOLUME"; then
warn "$TARGET_VOLUME 강제 분리 실패!"
echo "수동으로 '$TARGET_VOLUME'을(를) 분리 후 Enter 키를 누르세요."
read -r
else
info "$TARGET_VOLUME 강제 분리 성공"
break
fi
done
# ---------- 안정성 대기 및 리소스 정리 ----------
info "볼륨 분리 완료: $TARGET_VOLUME"
sleep 3
info "diskimages-helper 및 .dmg 사용 프로세스 종료 시도..."
# diskimages-helper 종료
DISKHELPER_PID=$(pgrep -f diskimages-helper | head -n 1)
if [ -n "$DISKHELPER_PID" ]; then
kill -9 "$DISKHELPER_PID" && info "diskimages-helper PID $DISKHELPER_PID 종료됨"
sleep 2
fi
# DMG 사용 중인 프로세스 종료
USED_PIDS=$(lsof "$DMG_NAME" 2>/dev/null | awk 'NR>1 {print $2}' | sort -u)
if [ -n "$USED_PIDS" ]; then
for pid in $USED_PIDS; do
info "리소스를 사용하는 PID $pid 종료 시도..."
kill -9 "$pid"
done
sleep 2
fi
# ---------- ISO 파일로 변환 ----------
info "ISO 파일로 변환 중..."
hdiutil convert "$DMG_NAME" -format UDTO -o "/tmp/${ISO_NAME}"
# ---------- ISO 파일 이동 ----------
FINAL_PATH=~/Desktop/$ISO_NAME
mv "/tmp/${ISO_NAME}.cdr" "$FINAL_PATH"
info "ISO 파일이 바탕화면에 생성됨: $FINAL_PATH"
# ---------- 임시 파일 제거 ----------
rm "$DMG_NAME" && info "임시 디스크 이미지 제거 완료"
echo ""
info "부팅 가능한 ISO 생성 완료!"
🧰 준비 사항
- macOS 시스템
- 터미널 사용 가능
- /Applications 폴더 내에 있는 *Install macOS .app (예: Install macOS Ventura.app)
💡 App Store에서 macOS 설치 프로그램을 먼저 다운로드 받아주세요.
📜 스크립트 주요 기능
해당 스크립트는 다음과 같은 순서로 동작합니다:
- /Applications 폴더에서 macOS 설치 앱 검색
- 설치 앱 크기에 기반한 디스크 이미지(.dmg) 생성
- createinstallmedia 명령어로 부팅 가능한 설치 디스크 생성
- 마운트된 볼륨을 감지 및 분리 (자동/수동 감지 포함)
- .dmg → .iso 변환 및 바탕화면에 저장
- 디스크 이미지 사용 중인 리소스 해제 및 정리
🖥️ 사용 방법
1. 터미널에서 스크립트 저장
스크립트 내용을 붙여넣고 저장 후 종료 (Ctrl + O, Enter, Ctrl + X)
2. 실행 권한 부여
3. 스크립트 실행
🔎 주요 기능 설명
✅ 설치 앱 자동 검색
스크립트는 /Applications 디렉토리에서 Install macOS *.app 형식의 설치 프로그램을 자동으로 검색합니다.
사용자가 직접 설치 앱을 선택할 수 있도록 메뉴도 제공합니다.
✅ 디스크 크기 자동 계산
설치 앱의 실제 크기에 여유 공간(약 3GB)을 더해 최적화된 디스크 크기를 계산합니다.

✅ createinstallmedia 자동 실행
macOS에서 공식 제공하는 createinstallmedia 명령어를 통해 부팅 가능한 디스크를 생성합니다.
✅ 마운트된 볼륨 자동 감지 및 수동 선택
가끔 자동으로 마운트된 볼륨을 감지하지 못하는 경우가 있어, 사용자에게 수동으로 선택할 수 있도록 메뉴를 제공합니다.
이는 VMware 등에서 스크립트를 사용할 때 매우 유용합니다.
✅ 디스크 강제 분리 및 리소스 해제
디스크 분리에 실패할 경우 diskutil 강제 해제, diskimages-helper 프로세스 강제 종료, .dmg를 사용하는 프로세스 kill 등 매우 안정적인 종료 루틴을 포함하고 있습니다.
✅ ISO 변환 및 바탕화면 저장
최종적으로 .dmg 파일을 .iso로 변환한 후, 바탕화면에 자동 저장합니다.
🧹 자동 정리까지 완벽
마지막에는 .dmg 파일 삭제, 모든 리소스 종료 등을 통해 시스템 리소스를 남기지 않도록 설계되어 있습니다.
📦 결과물
- 바탕화면에 다음과 같은 파일이 생성됩니다:
-
복사편집InstallmacOSTahoeBeta.iso
이 ISO 파일은 다음과 같은 용도로 사용할 수 있습니다:
- VMware 또는 VirtualBox용 macOS 설치
- USB 부팅 디스크 제작 (추가 도구 사용 시)
🛡️ 주의 사항
- 스크립트 실행에는 관리자 권한이 필요합니다 (sudo 포함).
- macOS Monterey 이후 버전은 보안 이슈로 인해 ISO 설치가 제한될 수 있으므로, 사용 환경을 확인하세요.
- createinstallmedia는 Apple에서 제공한 공식 방법이며, 설치 프로그램에 따라 위치가 달라질 수 있습니다.
✅ 마무리
이 스크립트를 통해 번거로운 macOS ISO 생성 과정을 자동화할 수 있습니다. 수동 명령어 입력 없이도 마우스 몇 번 클릭하거나 번호만 입력하면 끝!
VMware, VirtualBox 테스트 환경 구축이 잦은 개발자나 IT 관리자에게 특히 유용합니다.