Egloos | Log-in
F/OSS study
F/OSS study
[initramfs] early userspace 동작 과정
ubuntu: 9.10
initramfs-tools: 0.92


initramfs는 커널 부팅 시 root file system을 마운트하기 전에
필요한 동작들을 user space에서 처리하기 위해 사용하는 기능이다.
커널이 많은 모듈을 포함하여 빌드된 경우 file system 코드가 builtin 되어있지 않을 때
user space에서 해당 모듈을 먼저 load한 뒤에 마운트를 시도하는 것이 주 목적이다.

커널이 initramfs를 인식하면 적절한 위치에 압축을 풀어 임시 rootfs를 구성한 뒤
(initramfs는 cpio 아카이브를 gzip으로 압축한 파일이다.)
부팅 과정의 마지막에서 /init 파일을 실행한다.

init는 먼저 /sys, /proc, /dev 등 필요한 기본 파일 시스템을 마운트한 뒤에
커널 부트 옵션을 살펴 적절히 처리하는데 특히나 root file system을 포함하는 장치 이름이
uuid나 label로 주어진 경우 이를 /dev/disk/by-{uuid,label}의 형태로 변경하는 작업을 해 준다.

init의 동작은 몇 단계로 나누어지는데 각 단계의 상태를 점검하기 위해서
원하는 경우 각 단계에서 실행을 멈추고 shell 상태로 빠져나오도록 설정할 수 있다.
이를 위해서 커널 부트 옵션에 break를 지정하면 되는데 다음과 같은 값을 지정할 수 있다.
  • top : 본격적인 작업을 시작하기 전에 중지한다.
  • module : 필요한 모듈을 로드하기 전에 중지한다.
  • pre-mount : 마운트를 준비하기 전에 중지한다.
  • mount : 실제 마운트 과정을 실행하기 전에 중지한다.
  • bottom : 마운트가 끝난 후에 중지한다.
  • init : 모든 작업이 끝나고 나서 중지한다.
이러한 각 단계 별로 특정한 작업을 수행할 수 있는데
새로운 작업을 추가하려면 initramfs를 만들기 전에 /etc/initramfs-tools/scripts 디렉터리의
해당 디렉터리 아래에 실행 파일을 복사해 두면 된다.
각 단계는 다음과 같다.
  • init-top : 가장 처음에 실행되는 단계이다. top 지점 직후에 실행된다.
  • init-premount : 마운트를 준비하는 단계이다. pre-mount 지점 직후에 실행된다.
  • init-bottom : 마운트를 완료한 단계이다. bottom 지점 직후에 실행된다.
루트 장치는 로컬 머신 상의 디스크나 네트워크로 연결될 수 있는데
이를 위해 /etc/initramfs-tools/initramfs.conf 파일에서
BOOT 옵션을 local 혹은 nfs 중의 하나로 설정해야 한다.
이 값에 따라 mount 단계에서는 해당 이름의 스크립트 파일을 실행하고
그 내부에서는 다음과 같은 추가적인 스크립트들을 수행한다.
  • [local|nfs]-top : 마운트 과정의 첫 단계이다.
  • [local|nfs]-premount : 마운트를 실행하기 직전 단계이다.
  • [local|nfs]-bottom : 마운트를 실행한 직후의 단계이다.
우분투에서 기본적으로 제공하는 스크립트들은 /usr/share/initramfs-tools/scripts 아래에 존재한다.
순서대로 보기 좋게 정렬해보면 대략 다음과 같다.

$ tree /usr/share/initramfs-tools/scripts/
/usr/share/initramfs-tools/scripts/
|-- functions
|-- init-top
|   |-- all_generic_ide
|   |-- brltty
|   |-- console_setup
|   |-- framebuffer
|   |-- keymap
|   |-- udev
|   `-- usplash
|-- init-premount
|   `-- blacklist
|-- init-bottom
|   |-- _apparmor
|   `-- udev
|-- local
|-- local-top
|-- local-premount
|   |-- ntfs_3g
|   `-- resume
|-- local-bottom
|   `-- ntfs_3g
|-- nfs
`-- nfs-top
    `-- udev

또한 각 과정이 실행되는 과정을 자세히 보고 싶다면 커널 부트 옵션에 quiet를 없애거나 debug를 추가하면 된다.

by namhyung | 2010/03/01 01:34 | System | 트랙백 | 덧글(0)
트랙백 주소 : http://studyfoss.egloos.com/tb/5260213
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지 다음 페이지 ▶

카테고리
General
Application
System
Kernel
Book
Tips
태그
algorithm patch awk linux sed memory block-layer kernel binutils emacs blktrace bash C elf computer-architecture git x86 CAaQA3 perf build script gcc compiler scm CARM vcs synchronization SMP glibc documentation
전체보기
이글루 파인더

최근 등록된 덧글
informsi yang bagus dan b..
by agen qnc at 06/22
informasi yang bagus dan b..
by agen qnc at 06/22
informasi yang bagus dan b..
by agen qnc at 06/22
최근 등록된 트랙백
Tod's Ferrari Homme
by Tods Pas Cher,Kodak did ..
Mocassin Femme
by Mocassins Homme, I got so..
natural garcinia cambogia
by
rss

skin by jiinny


X