여기서는 멈추세요
- 원격 접속만 가능하고 콘솔·스냅샷이 없으면 부팅 관련 설정을 변경하거나 재부팅하지 않습니다.
- root·boot·network-online 같은 핵심 unit의 의존성을 이해하지 못했다면 비활성화하지 않습니다.
BOOT DIAGNOSIS
SAFE OPERATING BOUNDARY
변경한 unit과 drop-in을 별도 백업해 두고 문제가 생기면 복구 콘솔에서 원본을 복원한 뒤 daemon-reload를 수행합니다.
BEFORE YOU START
CHECK THE BRANCH
blame의 긴 시간만으로 원인을 확정하지 말고 critical-chain에서 의존성과 실제 대기 순서를 함께 확인합니다.
unit 자체 오류와 선행 의존성 실패를 구분하고 현재 부팅의 최초 오류부터 읽습니다.
fstab·파일시스템·루트 장치 오류 가능성이 있으므로 원격 SSH보다 콘솔을 유지하고 저장장치 가이드로 연결합니다.
FOLLOW THE FLOW
커널·initrd·userspace 시간을 분리하고 현재 실패 상태인 unit을 확인합니다.
systemd-analyze timesystemctl --failed --no-pageruserspace가 길면 unit 의존성을, kernel이나 initrd가 길면 저장장치·드라이버·초기 부팅 범위를 우선 봅니다.
느린 부팅과 명시적 unit 실패 중 어느 분기인지 기록합니다.
blame은 초기화에 걸린 시간 목록이고 critical-chain은 부팅 경로의 시간 의존성을 보여줍니다.
systemd-analyze blame --no-pager | head -30systemd-analyze critical-chain --no-pagerblame 상위여도 다른 unit을 막지 않았다면 전체 지연 원인이 아닐 수 있습니다.
임계 경로에서 지연이 시작된 unit 이름과 시간을 기록합니다.
마지막 오류만 보지 말고 의존 실패를 일으킨 최초 경고와 장치 메시지를 찾습니다.
journalctl --list-boots --no-pagerjournalctl -b -p warning --no-pagerjournalctl -b -1 -p warning --no-pagerdependency failed 앞의 mount, device, timeout 또는 service 오류를 우선 원인 후보로 봅니다.
문제 unit과 같은 시각의 커널·서비스 로그를 대조합니다.
UNIT_NAME을 실제 이름으로 바꾸고 drop-in과 실행 환경을 확인합니다.
systemctl status UNIT_NAME --no-pager -lsystemctl cat UNIT_NAMEsystemctl list-dependencies UNIT_NAME --all --no-pagersystemd-analyze verify /etc/systemd/system/UNIT_NAMEExecStart 경로, After·Requires, timeout, mount/device 의존성과 drop-in 충돌을 확인합니다.
설정 변경 전에 원본과 drop-in 파일을 보관하고 영향 범위를 승인받습니다.
실패 원인을 수정하지 않은 채 reset-failed만 실행해도 장애는 해결되지 않습니다.
sudo systemctl daemon-reloadsudo systemctl reset-failed UNIT_NAMEsudo systemctl restart UNIT_NAMEsystemctl status UNIT_NAME --no-pager -lsystemd-analyze critical-chain --no-pagerunit이 active이고 실패 목록에서 사라졌으며 동일 의존 경로의 지연이 줄어야 합니다.
재부팅 검증은 콘솔과 롤백 수단을 확보한 별도 변경 창에서 수행합니다.
PRIMARY REFERENCES
배포판과 버전에 따라 옵션·로그 위치가 다를 수 있습니다. 실행 전 서버의 --help와 로컬 매뉴얼을 함께 확인하세요.