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
태그
kernel memory script git build synchronization block-layer elf linux binutils CARM SMP compiler glibc C algorithm patch awk CAaQA3 bash computer-architecture x86 blktrace emacs sed gcc scm perf vcs documentation
전체보기
이글루 파인더

최근 등록된 덧글
http://serbaserbiinfoterkini56..
by cakra at 09/22
informsi yang bagus dan b..
by cakra at 09/16
informsi yang bagus dan be..
by pordanaia at 08/05
최근 등록된 트랙백
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