리눅스 시스템에서 부팅 과정에 필요한 커널 모듈을 어떻게 포함시킬 수 있는지에 대해 알아보겠습니다. 이 내용은 Red Hat Enterprise Linux (RHEL) 4부터 9까지의 버전에 적용됩니다.
RHEL에서 특정 커널 모듈을 initrd 또는 initramfs에 포함하려면 다음 방법 중 하나를 사용할 수 있습니다.
리눅스 커널 모듈 포함 방법
- 변경하기 전에 원본 initrd/initramfs 파일을 백업합니다.
- 명령에서
<kernelVersion>
을 실제 커널 버전으로 바꿉니다. <kernel module>
을 특정 모듈 이름(.ko 확장자 제외)으로 바꿉니다.
RHEL 6, 7, 8, 9에서 커널 모듈 포함시키기
이 버전에서는 두 가지 방법이 있습니다.
방법 1
- initramfs 파일을 백업합니다.
# cp /boot/initramfs-<kernelVersion>.img /boot/<kernelVersion>.bak
여기서 <kernelVersion>
은 재구성하려는 커널의 전체 버전입니다. 예를 들어, 커널 버전이 “5.14.0-70.22.1.el9_0.x86_64″이라면 다음과 같이 입력합니다.
# cp /boot/initramfs-5.14.0-70.22.1.el9_0.x86_64.img /boot/5.14.0-70.22.1.el9_0.x86_64.bak.$(date +%m-%d-%H%M%S).img
- dracut 명령어를 사용하여 initramfs를 수동으로 생성합니다.
--add-drivers
옵션에 포함시키고자 하는 커널 모듈의 이름을 지정합니다.
# dracut -fv --add-drivers <kernel module> /boot/initramfs-<kernelVersion>.img <kernelVersion>
예를 들어, foo
라는 커널 모듈을 포함시키고자 한다면 다음과 같이 입력합니다.
# dracut -fv --add-drivers foo /boot/initramfs-5.14.0-70.22.1.el9_0.x86_64.img 5.14.0-70.22.1.el9_0.x86_64
- dracut가 생성한 initramfs 파일에 커널 모듈이 로드되었는지 확인합니다.
# lsinitrd /boot/initramfs-<kernelVersion>.img | grep <module_name>
예를 들어, foo
라는 커널 모듈을 확인하고자 한다면 다음과 같이 입력합니다.
# lsinitrd /boot/initramfs-5.14.0-70.22.1.el9_0.x86_64.img | grep foo
방법 2
/etc/dracut.conf
또는/etc/dracut.conf.d/<my_conf>.conf
설정 파일에add_drivers
지시문을 추가합니다. 이 지시문에는 공백으로 구분된 커널 모듈의 목록(.ko 확장자 제외)을 입력합니다. dracut.conf(5) 매뉴얼 페이지를 참고하세요.
add_drivers+="<kernel module>"
예를 들어, foo
와 bar
라는 커널 모듈을 추가하고자 한다면 다음과 같이 입력합니다.
add_drivers+="foo bar"
- initramfs 파일을 백업합니다.
# cp /boot/initramfs-<kernelVersion>.img /boot/<kernelVersion>.bak
- initramfs를 재구성합니다.
# dracut -fv /boot/initramfs-<kernelVersion>.img <kernelVersion>
- dracut가 생성한 initramfs 파일에 커널 모듈이 로드되었는지 확인합니다.
# lsinitrd /boot/initramfs-<kernelVersion>.img | grep <module_name>
RHEL 4, 5에서 커널 모듈 포함시키기
이 버전에서는 세 가지 방법이 있습니다.
방법 1
mkinitrd 명령어를 사용하여 initrd를 수동으로 생성합니다. --with
옵션에 포함시키고자 하는 커널 모듈의 이름을 지정합니다.
# mkinitrd --with=<kernel module> /boot/initrd-$(uname -r).img $(uname -r)
예를 들어, foo
라는 커널 모듈을 포함시키고자 한다면 다음과 같이 입력합니다.
# mkinitrd --with=foo /boot/initrd-$(uname -r).img $(uname -r)
방법 2
저장소 관련 커널 모듈을 포함시키고자 한다면, /etc/modprobe.conf
파일에 별칭(alias)을 추가합니다. 여러 개의 커널 모듈을 추가하고자 한다면 별칭 번호를 증가시킵니다.
alias scsi_hostadapter <kernel module>
alias scsi_hostadapter1 <kernel module>
alias scsi_hostadapter2 <kernel module>
예를 들어, foo
, bar
, baz
라는 커널 모듈을 추가하고자 한다면 다음과 같이 입력합니다.
alias scsi_hostadapter foo
alias scsi_hostadapter1 bar
alias scsi_hostadapter2 baz
이렇게 하면 커널 모듈(그리고 그에 따른 의존성)이 initrd에 포함됩니다.
방법 3
저장소 관련이 아닌 커널 모듈을 포함시키고자 한다면, /etc/modprobe.conf
파일에 다음과 같은 줄을 추가합니다.
install <kernel module> /sbin/modprobe -q --ignore-install <kernel module>; /bin/true
예를 들어, foo
라는 커널 모듈을 추가하고자 한다면 다음과 같이 입력합니다.
install foo /sbin/modprobe -q --ignore-install foo; /bin/true
요약
이상으로 리눅스 시스템에서 부팅 과정에 필요한 커널 모듈을 어떻게 포함시킬 수 있는지에 대해 알아보았습니다.