Profile picture

[Linux] chroot란?

JaehyoJJAng2024년 08월 04일

chroot

chroot(Change Root)는 프로세스가 바라보는 루트 디렉토리(/)를 강제로 변경 하는 기능을 합니다.

이렇게 되면 해당 프로세스는 지정된 디렉토리 이하만 볼 수 있고, 실제 시스템의 다른 경로는 접근이 불가능하죠.


즉, chroot는 작은 가상의 리눅스 환경을 만드는 것과 비슷한 효과를 주며, 흔히 다음과 같은 상황에서 활용됩니다.

  • 시스템 복구: 루트 파일 시스템이 망가졌을 때 다른 디스크에서 부팅 후 문제의 파티션을 마운트하고 chroot로 진입 -> 마치 해당 시스템에서 직접 부팅한 것처럼 조치 가능.
  • 개발/테스트 환경: 특정 라이브러리 버전 충돌 방지를 위해 별도 루트 디렉토리에서 실행

chroot가 동작하기 위한 조건?

단순히 파티션이나 디렉토리가 있다고 해서 무조건 chroot가 동작하는 건 아닙니다.


최소한의 루트 파일시스템 구조 가 있어야만 가능합니다.

  • 필수 디렉토리: /bin, /sbin, /usr/bin, /usr/sbin
  • 라이브러리: /lib, /lib64, /usr/lib (실행 파일에 필요한 동적 라이브러리들)
  • 환경 파일: /etc
  • 가상 파일시스템: /proc, /sys, /dev → 보통 chroot 진입 후 마운트해줘야 정상 동작

만약 이 구조가 없다면 chroot는 단순히 빈 껍데기에 들어가는 것이고, 실행 가능한 명령어도 거의 없습니다 ..!!



실습: chroot 활용 예시

예시 1. 부트로더 재설치

시스템이 부팅되지 않을 때 chroot를 활용하여 어떻게 복구할 수 있는지 실습을 통해 확인해보겠습니다.


먼저 부팅이 가능한 백업 디스크 또는 라이브 CD로 부팅을 하고,

문제가 발생한 디스크가 그대로 장착이 되어있는 상태에서 진행한다는 가정으로 실습을 이어나가겠습니다.


1. 손상된 시스템 파티션 마운트

mount /dev/sda2 /mnt
mount /dev/sda2 /mnt/boot # boot 파티션이 분리된 경우

2. 필수 가상 파일시스템 마운트

sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

3. chroot 진입

sudo chroot /mnt

4. 복구 작업 수행

update-grub  # GRUB 복구
apt-get update && apt-get upgrade  # 패키지 업데이트
passwd root  # 루트 비밀번호 재설정

5. 종료 및 언마운트

exit
sudo umount /mnt/{dev,proc,sys,boot,}

Loading script...