리눅스 시스템을 부팅할 때, 운영체제가 완전히 로드되기 전에 발생하는 일련의 과정들이 있습니다. 그 중심에 initramfs가 있습니다. initramfs는 초기 RAM 파일 시스템으로, 운영체제가 커널을 로드한 후 가장 먼저 마운트하는 파일 시스템입니다. 이 작은 파일 시스템은 실제 루트 파일 시스템(rootfs)을 마운트하는 데 필요한 드라이버와 유틸리티를 포함하고 있어, 시스템이 정상적으로 부팅될 수 있도록 돕는 핵심적인 역할을 수행합니다.

initramfs의 중요성 왜 알아야 할까요?

initramfs는 단순한 초기 파일 시스템이 아닙니다. 다음과 같은 중요한 이유 때문에 이해해야 합니다.

initramfs는 어떻게 작동할까요?

    • 커널 로드: 시스템 전원을 켜면 BIOS 또는 UEFI 펌웨어가 부트 로더(예: GRUB)를 실행하고, 부트 로더는 커널 이미지를 메모리에 로드합니다.
    • initramfs 로드: 커널은 initramfs 이미지를 메모리에 로드하고, 이를 루트 파일 시스템으로 마운트합니다.
    • /init 실행: 커널은 initramfs 내부에 있는 `/init` 스크립트를 실행합니다. 이 스크립트는 실제 루트 파일 시스템을 마운트하는 데 필요한 작업을 수행합니다.
    • 루트 파일 시스템 마운트: `/init` 스크립트는 필요한 드라이버를 로드하고, LVM, RAID, 암호화된 파티션 등 복잡한 설정이 필요한 경우 이를 처리합니다. 최종적으로 실제 루트 파일 시스템을 마운트합니다.
    • 제어권 전환: 루트 파일 시스템이 마운트되면 `/init` 스크립트는 제어권을 실제 루트 파일 시스템의 `/sbin/init` 프로세스에 넘겨줍니다.
    • 운영체제 부팅: `/sbin/init` 프로세스는 나머지 부팅 과정을 진행하여 운영체제를 완전히 로드합니다.

initramfs의 구조 자세히 알아보기

initramfs는 기본적으로 cpio 아카이브로 압축된 파일 시스템 이미지입니다. 이 이미지에는 다음과 같은 요소들이 포함되어 있습니다.

initramfs 생성 및 수정 방법

initramfs는 일반적으로 `mkinitramfs` 또는 `dracut`과 같은 도구를 사용하여 생성됩니다. 각 배포판마다 사용법이 조금씩 다를 수 있지만, 기본적인 원리는 같습니다. initramfs를 수정하려면 다음과 같은 단계를 따릅니다.

    • initramfs 이미지 추출: cpio 아카이브를 사용하여 initramfs 이미지를 임시 디렉토리에 추출합니다.
    • 파일 수정 또는 추가: 필요한 파일을 수정하거나 추가합니다. 예를 들어, `/init` 스크립트를 수정하거나, 새로운 유틸리티를 추가할 수 있습니다.
    • initramfs 이미지 재구성: 수정된 파일들을 사용하여 새로운 initramfs 이미지를 생성합니다.
    • 부트 로더 설정 업데이트: 새로운 initramfs 이미지를 사용하도록 부트 로더 설정을 업데이트합니다.

예시: Ubuntu에서 initramfs를 수정하는 방법

1. 임시 디렉토리 생성

mkdir /tmp/initramfs_temp

2. initramfs 이미지 추출

cd /tmp/initramfs_temp

zcat /boot/initrd.img-$(uname -r) | cpio -idmv

3. /init 스크립트 수정 (예: 특정 메시지 추가)

echo “echo ‘Custom message from initramfs'” >> init

4. initramfs 이미지 재구성

find . | cpio -o -H newc | gzip > /boot/initrd.img-$(uname -r).new

5. 부트 로더 설정 업데이트 (update-initramfs 사용 권장)

update-initramfs -u -k all # 모든 커널에 대해 initramfs 업데이트

update-grub

6. 시스템 재부팅

reboot

 

주의: initramfs를 잘못 수정하면 시스템이 부팅되지 않을 수 있습니다. 반드시 백업을 수행하고, 신중하게 작업해야 합니다.

initramfs와 initrd의 차이점

initramfs와 initrd는 모두 초기 RAM 파일 시스템이지만, 몇 가지 중요한 차이점이 있습니다.

특징initrdinitramfs파일 시스템 이미지블록 디바이스 이미지 (파일 시스템으로 포맷됨)cpio 아카이브 (압축 가능)메모리 사용량커널에 의해 복사되어 메모리에 상주 (압축 불가)필요한 부분만 압축 해제하여 사용 가능 (메모리 효율적)수정 용이성루프 디바이스를 사용하여 마운트해야 수정 가능cpio 아카이브를 추출하여 직접 수정 가능현대 시스템에서의 사용거의 사용되지 않음대부분의 현대 리눅스 배포판에서 사용

initramfs는 initrd에 비해 더 유연하고 효율적이며, 현대적인 시스템에서 선호되는 방식입니다.

initramfs 관련 흔한 오해와 진실

전문가의 조언

initramfs를 다룰 때는 항상 백업을 생활화하고, 변경 사항을 적용하기 전에 테스트 환경에서 충분히 검증하는 것이 중요합니다. 또한, 배포판에서 제공하는 도구(예: `update-initramfs`, `dracut`)를 사용하는 것이 직접 파일을 수정하는 것보다 안전하고 편리합니다.

자주 묻는 질문 (FAQ)

initramfs 활용 팁과 조언

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다