목차

Grub boot kernel argument 설정

대상 : RHEL7 이상 시스템

grubby 를 이용한 방법

# 파라메터 추가시
$ grubby --update-kernel=ALL --args="<NEW_PARAMETER>"

# 다중 값 추가시 예제 (반드시 ""로 묶어줘야함)
$ grubby --update-kernel=ALL --args="rd.lvm.lv=vg/lv1 rd.lvm.lv=vg/lv2"

# 파라메터 제거시
$ grubby --update-kernel=ALL --remove-args="<PARAMETER_TO_REMOVE>"

# 특정 커널만 적용시
$ grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<NEW_PARAMETER>"

수동으로 수정 적용시

/etc/default/grub 파일을 수정한다.
예를 들어 아래 항목을 추가한다고 할때

GRUB_TERMINAL="serial"
GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"

GRUB configuration 을 업데이트

커널파라메터를 수정했으면 해당 내용을 grub.cfg에 반영해야 한다.

# Legacy-BIOS System
$ grub2-mkconfig -o /boot/grub2/grub.cfg

# UEFI-BIOS System (실제로는 위의 legacy config를 참조하기때문에 안해도 상관 없음)
$ grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

주의사항

grubby로 추가된 파라메터는 /etc/default/grubGRUB_CMDLINE_LINUX와 같이 추가가 되는데 이것은 따로 /boot/grub2/grub.cfg에 추가하지 않아도 자동으로 반영이 되는 구조이다.
그런데 여기서 문제는 동일한 값을 여러개 넣은경우는 문제가 된다.
예를 들어 rd.lvm.lv라는 파라메터를 여러개 넣는다고 가정하자
/boot/grub2/grub.cfg내에

  set kernelopts="root=/dev/mapper/rhel_kvm33-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel_kvm33-swap rd.lvm.lv=rhel_kvm33/root rd.lvm.lv=rhel_kvm33/swap rhgb quiet "

위와 같이 존재한다고 할때

grubby를 통해서 --arg="rd.lvm.lv=rhel_kvm33/root rd.lvm.lv=rhel_kvm33/swap rd.lvm.lv=rhel_kvm33/test" 와 같이 동일한 파라메터의 추가된 값 rd.lvm.lv=rhel_kvm33/test 를 추가했다고 하면

/etc/default/grub 에는 해당 내용이 추가되지만 실제 부팅할때 이 값은 반영되지 않는다. 왜냐하면 에서 부팅할때 /boot/grub2/grub.cfg에 정의되어 있지 않은 추가 항목만 반영이 되기 때문에 실제 /boot/grub2/grub.cfg에는 rd.lvm.lv라는 파라메터가 있기 때문에 동일한게 몇개 추가가 되던 있는걸로 가정하고 추가적으로 로딩 하지 않는다.

따라서 이런경우 꼭 grub.cfg를 업데이트 해줘야 한다.