이 글에서는 Ubuntu, Mint, Kali 등 Linux 시스템이 부팅되지 않고 initramfs 초기화 과정에서 BusyBox 프롬프트로 떨어지는 문제를 해결하는 방법을 소개합니다. 이러한 상황에서는 일반적인 부팅이 불가능하며, initramfs 명령 프롬프트만 사용할 수 있게 됩니다.
initramfs란 무엇인가?
initramfs(Initial RAM Filesystem)는 별도의 블록 디바이스 없이 RAM에서 동작하는 tmpfs 기반의 초기 파일 시스템입니다. initrd와 마찬가지로, 루트 파일 시스템의 init 프로세스를 호출하기 전에 파일 시스템을 마운트하는 도구와 스크립트를 포함하고 있습니다.

Linux에서 손상된 Ext4 슈퍼블록 복구하기
Ubuntu가 initramfs 초기화 중 BusyBox로 빠져든다면, 디스크의 슈퍼블록(superblock)이 손상되었을 가능성이 높습니다.
Linux는 여러 개의 슈퍼블록 백업 복사본을 유지하고 있습니다. 이 문제가 발생했을 때 시스템을 복구하려면, 구조용 이미지/디스크/Live CD로 부팅한 후 터미널을 열어야 합니다. 부팅이 완료되면 터미널에 다음 명령어를 입력합니다:
# sudo fdisk -l|grep Linux|grep -Ev 'swap'
이 명령은 볼륨 정보를 반환합니다:
/dev/vda2 4096 83884031 83879936 40G Linux filesystem
볼륨 이름을 기억한 뒤, 다음 명령어에 해당 이름을 지정합니다:
# sudo dumpe2fs /dev/vda2 | grep superblock
이 명령은 백업 슈퍼블록 목록을 보여줍니다:

여기서는 두 번째 백업 슈퍼블록을 사용하여 손상된 슈퍼블록을 대체합니다(Primary를 제외한 어떤 슈퍼블록이든 사용할 수 있습니다). 백업 슈퍼블록으로 디스크를 검사합니다:
# sudo fsck -b 98304 /dev/vda2 -y
만약 다음과 같은 출력이 나타난다면:
fsck from util-linux 2.31.1 e2fsck 1.44.1 (24-Mar-2018) /dev/vda2 is mounted. e2fsck: Cannot continue, aborting
볼륨이 마운트된 상태이므로 먼저 마운트를 해제해야 합니다:
# umount /dev/vda2
슈퍼블록 교체가 성공적으로 완료되면 다음과 같은 메시지가 표시됩니다:
fsck from util-linux 2.31.1 e2fsck 1.44.1 (24-Mar-2018) /dev/vda2 was not cleanly unmounted, check forced. Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Free blocks count wrong for group #231 (32254, counted=32253). Fix? yes Free blocks count wrong for group #352 (32254, counted=32248). Fix? yes Free blocks count wrong for group #358 (32254, counted=27774). Fix? yes .......... /dev/vda2: ***** FILE SYSTEM WAS MODIFIED ***** /dev/vda2: 85986/905464576 files (0.2% non-contiguous), 3904682/905464576 blocks
이후 부팅 미디어를 제거하고 컴퓨터를 재시작하면 정상적으로 부팅될 것입니다.
fsck 부팅 오류: 예기치 않은 불일치(Unexpected Inconsistency)
initramfs(BusyBox) 문제의 두 번째 유형은 터미널 창에 다음과 같은 메시지가 표시되는 경우입니다:
/dev/sda1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY The root filesystem on /dev/sda1 requires a manual fsck.

이 메시지가 보이지 않는다면 터미널에 (initramfs) exit를 입력해 보세요. 입력 후 오류 메시지가 나타날 수 있습니다.
이 메시지는 수동 디스크 검사가 필요한 볼륨을 알려줍니다. initramfs 프롬프트에서 다음 명령어를 실행합니다:
# fsck /dev/sda1 -y
디스크 검사가 완료되면 컴퓨터를 재시작하고 Linux가 정상적으로 부팅되는지 확인합니다.
Alert! /dev/volume이 존재하지 않는 경우
fstab 문제
Linux 호스트 부팅 시 다음과 같은 오류를 볼 수 있습니다:
ALERT! /dev/sda1 does not exist. Dropping to a shell.

이 오류는 Linux를 방금 설치했거나 호스트에 fstab 관련 문제가 있을 때 발생합니다. 특히 USB 드라이브로 시스템을 설치한 경우에 자주 발생합니다. 시스템은 어떤 볼륨이든 오류를 표시할 수 있습니다. 첫 번째 경우와 마찬가지로, 구조용/부팅 Linux 미디어로 부팅한 후 몇 가지 작업을 수행해야 합니다. 다음 명령어로 디스크 UUID를 확인합니다:
# sudo blkid
시스템은 다음과 유사한 결과를 반환합니다:
/dev/sda2: UUID="36cce3d5-cbdb-46f4-adbf-3f9aaa01d729" TYPE="ext4" PARTUUID="fea4dab1-4e12-4327-85c6-76ade18f64e1"
여기서 시스템이 sda2에서 부팅되어야 하는데, 실제로는 sda1에서 부팅을 시도하고 있다는 것을 알 수 있습니다.
볼륨을 임의의 디렉터리에 마운트합니다. 예를 들면:
# sudo mount /dev/sda2 /mnt
/mnt 디렉터리에서 /dev/sda2를 확인한 후, /etc/fstab 파일을 찾아 /dev/sda1이 포함된 라인을 다음과 같이 수정합니다:
UUID=36cce3d5-cbdb-46f4-adbf-3f9aaa01d729 / ext4 errors=remount-rw 0 1
파일을 저장하고, /mnt에서 볼륨을 마운트 해제한 뒤 재부팅합니다. 문제가 잘못된 볼륨 이름과 관련이 있었다면 서버가 정상적으로 부팅될 것입니다.
또한 응급 모드(emergency mode)로 부팅하여 이 문제를 해결할 수도 있습니다. 루트 디렉터리를 읽기/쓰기 모드로 다시 마운트합니다:
# sudo mount -o remount,rw /
그런 다음 fstab을 수정하고 서버를 재시작합니다.
하드웨어 문제
일부 메인보드에서는 SATA 포트에 임의의 번호가 할당될 수 있습니다. 이 경우에도 이전 섹션에서 설명한 오류가 발생할 수 있습니다. 이를 해결하려면 GRUB 부트로더를 수정해야 합니다.
응급 모드 또는 Live CD로 부팅한 후 /boot/grub/grub.cfg 파일을 편집합니다.
부팅 볼륨을 지정하는 라인에서, 예를 들어:
Linux /boot/vmlinuz-4.15.0-70-generic root=/dev/sda1 rw quiet elevator=noop fsck.repair=yes
디스크 경로를 UUID로 교체합니다:
Linux /boot/vmlinuz-4.15.0-70-generic root=UUID=36cce3d5-cbdb-46f4-adbf-3f9aaa01d729 ro quiet elevator=noop fsck.repair=yes

디바이스 경로 대신 UUID를 사용하면 SATA 포트 번호가 변경되더라도 시스템이 항상 올바른 볼륨을 찾을 수 있어, 부팅 오류를 근본적으로 예방할 수 있습니다.