VMware vSphere를 RHEL 9.4로 마이그레이션해야 하는 일이 생겨 RHEL 9를 설치했다.
RHEL 9.4에서 IOMMU를 사용하기 위해 /etc/default/grub의 GRUB_CMDLINE_LINUX 라인에 intel_iommu=on 매개변수를 추가하고 grub2-mkconfig -o /boot/grub2/grub.cfg를 실행한 뒤 재부팅했다.
부팅이 다 되고, 아래의 명령어를 실행했을 때 여전히 IOMMU가 활성화되지 않았다.
cat /proc/cmdline
grubby –info /boot/vmlinuz-5.14.0-427.22.1.el9_4.x86_64
virt-host-validate
여러 방법을 시도해도 매개변수가 추가되지 않아서 AlmaLinux, Rocky Linux 포럼, RHEL 문서 등을 열심히 뒤졌다.
RHEL 9.2까지는 grub2-mkconfig 명령이 새 grub.cfg 파일을 생성하고 항상 모든 BLS 스니펫의 명령줄 인수를 /etc/default/grub 파일에 있는 GRUB_CMDLINE_LINUX 변수 값으로 덮어썼다.
RHEL 9.3부터 BLS(Boot Loader Specification) 동작이 바뀌었다.
grub2-mkconfig 명령이 더 이상 BLS 스니펫의 커널 명령줄을 기본적으로 GRUB_CMDLINE_LINUX로 덮어쓰지 않는다.
부트로더 메뉴의 각 커널은 해당 BLS 스니펫에서 커널 명령줄을 가져온다.
이 새로운 기본 동작은 GRUB_ENABLE_BLSCFG=true 옵션에 의해 발생한다.이것 때문에 몇 시간을 삽질했다…
RHEL 9.3 이상에서 grub 수정 및 적용 방법 세 가지를 소개하고자 한다.
1) –update-bls-cmdline 명령어 사용
/etc/default/grub 수정 후 아래 명령어 실행
grub2-mkconfig --update-bls-cmdline -o /boot/grub2/grub.cfg
2) grubby 사용
# 매개변수 추가
grubby --update-kernel=ALL --args="<NEW_PARAMETER>"
(e.g. grubby --update-kernel=ALL --args="intel_iommu=on"
# 매개변수 제거
grubby --update-kernel=ALL --remove-args="<PARAMETER_TO_REMOVE>"
(e.g. grubby --update-kernel=ALL --remove-args="intel_iommu=on"
3) /etc/default/grub 수정 (GRUB_ENABLE_BLSCFG=false)
# /etc/default/grub에 있는 GRUB_ENABLE_BLSCFG를 false로 수정한다.
GRUB_ENABLE_BLSCFG=false
커널 매개변수 확인
cat /proc/cmdline
grubby --info /boot/vmlinuz-커널버전
(e.g. grubby --info /boot/vmlinuz-5.14.0-427.22.1.el9_4.x86_64)
참고 문서, 포럼
https://forums.almalinux.org/t/changes-to-etc-default-grub-not-taking-effect/3389
https://forums.rockylinux.org/t/grub2-mkconfig-rl9-3-fresh-install-bug/12118
https://forums.rockylinux.org/t/how-do-i-remove-crashkernel-from-cmdline/13346/23?page=2