두근두근이야기

mkinitrd 명령어 본문

IT/IT ::Advanced SystemProgramming

mkinitrd 명령어

골든 2013. 3. 24. 23:07

리눅스 커널 공부중.. mkinitrd명령어. 이것은 무엇인가?!

make + init+ read???

이런 의미인가? 살펴봅시다!

 

1. mkinitrd 명령어

mkinitrd <initrd-image> <kernel-version>

initrd-image: initrd의 파일명

kernel-version: 커널 버젼명을 쳐준다.

참고로 아래 예시는 내가 커널 설치시 썼던 명령어다.

# mkinitrd initrd-3.6.11.img 3.6.11

 

 

2. mkinitrd 옵션(옵션은 아래사이트에서 퍼왔습니다: http://linuxqna.com/700)

--builtin = module: 모듈이 모듈형태로 동작하는 것이 아니라 커널 내부 동작해야 하는 모듈이면 이 옵션을 사용하면 될 것이다.

-f: initrd-image 이름이 이미 존재하면 덮어쓰기를 하게 해준다.

--fstab=fstab: 기본적으로 /etc/fstab를 참조하지만 자신이 만든 fatab파일을 참조하게 만들 때 사용한다.

--preload=module: initrd가 실행할 때 SCSI모듈이 올라오는 것을 기준으로 SCSI모듈 전에 실행될 모듈을 지정할 때 사용한다.

--with=module: initrd가 실행할 때 SCSI모듈이 올라오는 것을 기준으로 SCSI모듈 후에 실행 될 모듈을 지정할 때 사용한다.

 

3. 왜 initrd는 램 디스크라고 불리는 것인가?

initrt를 풀어서 안의 내용을 보면 모듈을 올리는데 필요한 것과 시스템에 필요한 정보를 마운트할 파일 시스템을 가지고 있는 것을 볼 수 있다. 하지만 모듈들을 잘 살펴보면 파일 시스템과 관련된 ext3.ko, xfs.ko파일을 볼 수 있을 것이다. 이것은 파일 시스템이 구동되기 위하여 올라가야 하는 모듈들이다. 그럼, 이 모듈을 올려주는 역할을 하는 initrd는 어떻게 동작하기에 이런 모듈을 파일 시스템이 올라오기도 전에 구동되게 하는 것일까?

이것은 바로 부트로더의 역할 때문이다. 부트로더는 최초에 grup.conf나 lilo.conf에 설정된 디스크의 위치와 디렉토리 위치에서 vmlinuz와 initrd 파일을 램으로 복사하는 역할을 해준다. 이것은 결국 부팅시 사용되는 initrd는 램으로 복사된 initrd를 이용하여 램상에서 동작을 하는 것이다. 결국 램을 디스크처럼 생각하고 그 곳에 tree(아래 그림 참조)에서 본 구조를 그대로 풀어서 init의 설정 내용대로 실행한 이후에 실제 우리가 사용하는 디스크로 넘어와 /sbin/init를 실행하게 된다.

결국 램에서 동작하면서 램을 디스크처럼 이용하기에 램 디스크라고 하는 것이다.

<initrd tree>

bin / dev / init / lib / loopfs / proc / sbin / sys / sysroot

위는 initrd의 하위 루트에 있는 폴더들

4. mkinitrd 명령어의 역할

1)initrd를 위한 파일 시스템을 구성한다.

2)부팅시 필요한 모듈을 옮겨준다.

3)initrd에서 필요한 파일을 복사해 준다.

4)initrd에 있는 init를 생성 시켜준다.