Fedora에서 kexec를 사용하여 최신 설치된 커널을 자동으로 사용하는 방법은 무엇입니까?

Fedora에서 kexec를 사용하여 최신 설치된 커널을 자동으로 사용하는 방법은 무엇입니까?

kexecFedora Linux에서 최신 설치된 커널로 자동으로 빠르게 재부팅하는 방법은 무엇입니까 ?

kexec --load명령줄 사용법은 다소 장황합니다. 다음을 제공해야 합니다.

  • 커널 이미지(예 /boot/vmlinuz-3.18.8-201.fc21.x86_64:
  • --initrd=/boot/initramfs-3.18.8-201.fc21.x86_64.img와 같은 해당 initrd 파일
  • --append="root=/dev/sda1 ro rhgb quiet LANG=en_US.UTF-8"와 같은 커널 명령줄 인수 /proc/cmdline.

일반적으로 여러 커널이 설치되어 있기 때문에 탭 완성도 그다지 도움이 되지 않기 때문에 모두 입력하는 것은 지루합니다.

UEFI 시스템과 Windows 8 듀얼 부팅 노트북을 사용하면 기본이 아닌 시스템을 선택하기 위해 재부팅을 중단하는 적절한 순간을 놓치기 쉽습니다. 이를 놓치면 Windows 8이 시작될 때까지 기다려야 합니다. 자동으로 로그인하고 재부팅한 후 다시 시도해야 할 수도 있습니다.

답변1

지금처럼 현재 명령줄 인수를 재사용하는 것은 좋은 생각이 아니라고 생각합니다. GRUB가 설정되어 있다고 가정하고 대신 GRUB 구성을 확인하는 것이 좋습니다. 이 grubby명령을 사용하면 필요한 정보를 얻을 수 있습니다. 의 정확한 출력 형식은 grubby --info약간 일관성이 없지만 사용하기에는 충분합니다.

# cat /usr/local/bin/kexec-load
#!/bin/sh
set -eu
index=$(grubby --default-index)
grubby --info="$index" | {
  IFS==
  while read field value
  do
    case $value in
    \"*\")
      eval "$field=$value" ;;
    *)
      eval "$field=\$value" ;;
    esac
  done
  unset IFS

  set -x
  kexec -l --initrd="$initrd" --append="root=$root $args" -- "$kernel"
}

이는 사용 가능한 최신 커널을 사용하지 않고 기본적으로 사용할 커널로 Grub에 구성된 커널을 사용합니다. 최신 설치된 커널을 확인하는 코드가 이미 있으며, 대신 사용하려는 경우 쉽게 --info="$index"변경할 수 있습니다.--info=$latestkernel

답변2

저는 /usr/local/bin/kexec-load-latest가장 최근의 커널을 자동으로 선택하고 이를 kexec.

#!/bin/bash

set -x

NEWEST_KERNEL_VERSION="$(
  rpm --query --queryformat='%{VERSION}-%{RELEASE}.%{ARCH}\n' kernel \
  | sort --version-sort --reverse \
  | head --lines=1
)"
kexec --load --append="`cat /proc/cmdline`" \
  --initrd="/boot/initramfs-$NEWEST_KERNEL_VERSION.img" \
  "/boot/vmlinuz-$NEWEST_KERNEL_VERSION"

chmod a+x /usr/local/bin/kexec-load-latest간단하게 다음을 수행할 수 있도록 실행 파일로 설정합니다 .

  • 달리다 sudo /usr/local/bin/kexec-load-latest,
  • 그런 다음 sudo reboot내 데스크탑 환경의 재부팅 기능을 사용하십시오.

rpmFedora 21에서 테스트되었습니다. 이는 RHEL 또는 CentOS와 같은 다른 최신 기반 배포판에서도 작동합니다 .

관련 정보