file system 이 깨져서 마운트가 안 되거나 루트 암호를 까먹었거나 등 여러 가지 이유로 리눅스 복구 모드로 들어가서 시스템 관리를 해야 하는 경우가 있습니다.


emergency mode 진입

응급 모드로 들어가려면 부팅시 커널 선택 목록에서 알파벳 'e' 를  눌러서 grub 부팅 옵션 화면에 들어갑니다. 

linux 로 시작하는 라인을 찾은 후에 맨 뒤에 systemd.unit=emergency.target 부팅 옵션을 추가해 줍니다.

Ctrl-x  키를 누르면 부팅이 진행되고 다음과 같이 응급 프롬프트가 뜹니다.

여기에서 루트 암호를 입력하면 시스템 복구 작업을 진행할 수 있고 Ctrl-D 키를 누르면 정상 모드로 부팅할 수 있습니다.

rd.break 모드에서 root 암호 복구하기

루트 암호를 잃어 버렸을 경우 응급 모드로 진입해도 암호를 모르므로 복구할 수 없습니다. 이럴 경우 grub 부팅 옵션에 부팅 프로세스의 초기 단계만 수행(initramfs 에서 실제 시스템으로 제어권을 넘기지 않고 부팅 종료)하는 rd.break 옵션을 사용해야 합니다.


grub 부팅 옵션에서 rd.break 를 추가한 후에 Ctrl-x 를 눌러서 부팅을 진행합니다.


부팅되면 프롬프트가 switch_root 로 표시됩니다. 다시 읽기 쓰기로 마운트하기 위해 mount -o remount,rw /sysroot 명령을 사용합니다.


루트 파일 시스템을 변경하기 위해 chroot 명령을 실행합니다.

chroot /sysroot
CODE

루트 파일 시스템이 변경되면 프롬프트가 switch_root 에서 sh-4.4 로 변경됩니다.


이제 passwd 명령을 실행하면 원래 리눅스 시스템에 반영되므로 루트 암호를 복구할 수 있습니다.

passwd root
CODE

만약 passwd 실행후 알수 없는 문자가 표시된다면 한글이 깨져서이고 export LANG=C 명령어로 해결할 수 있습니다.


passwd 명령어로 루트 암호를 변경했다면 복구 모드에서 수정한 파일은 SELinux Context 가 없어서 재부팅시 문제가 되며 로그인이 불가할 수 있습니다. 

다음 명령중 하나를 실행하면 재부팅시 자동으로 파일에 대해 SELinux context relabeling 을 수행합니다.


touch /.autorelabel
CODE
fixfiles onboot
CODE

touch 명령은 파일명 오타를 내도 확인할 수 없으므로 실행 결과를 확인할 수 있는 fixfiles onboot 명령을 권장합니다.


이제 다음 부팅에 SELinux Context relabeling 작업 설정이 끝났다면 exit 를 입력하고 재부팅해서 루트 암호 정상 변경 여부를 확인합니다.


같이 보기