Tương đương với bản cập nhật-grub cho các hệ thống RHEL / Fedora / CentOS?


36

Trong Ubuntu (và tôi đoán trong Debian cũng vậy) có một tập lệnh hệ thống có tên update-grubtự động thực thi grub-mkconfig -ovới đường dẫn chính xác cho tệp cấu hình grub.

Có lệnh nào tương tự cho các bản phân phối dựa trên Red Hat không?

Nếu không, làm thế nào để hệ thống biết tệp cấu hình grub được cập nhật ở đâu khi cài đặt phiên bản kernel mới?

Câu trả lời:


14

Các hành động cụ thể cần xảy ra khi gói RPM được cài đặt hoặc gỡ bỏ được bao gồm trong chính gói RPM trong các phần cài đặt trước, sau cài đặt, gỡ cài đặt trước và sau gỡ cài đặt.

Đối với mỗi gói RPM được cài đặt, bạn có thể truy vấn cơ sở dữ liệu RPM để biết các tập lệnh chính xác được bao gồm trong rpmlệnh:

rpm -q --scripts <package-name>

Chạy lệnh đó trên gói kernel cho trả về CentOS 6:

postinstall scriptlet (using /bin/sh):
<snip>
/sbin/new-kernel-pkg --package kernel --install 2.6.32-431.17.1.el6.x86_64 || exit $?

Từ hướng dẫn:

new-kernel-package - công cụ cài đặt kernel script


2
thay vào đó, chạy lệnh tương tự trên năng suất Fedora 20 /bin/kernel-install. Vui lòng chỉnh sửa câu trả lời của bạn để bao gồm thông tin này để tham khảo trong tương lai
pqnet

3
Đó chính xác là lý do tại sao tôi bắt đầu câu trả lời của mình với các bước cần thiết để tìm hiểu. Tôi nghĩ rằng việc truy vấn các tập lệnh cài đặt có thể khá phổ biến trong thế giới RPM trong việc giúp bạn hiểu cách cập nhật kernel được thực hiện. Bằng cách đó, câu trả lời của tôi sẽ chịu được thử thách về thời gian tốt hơn nhiều so với việc chỉ đặt tên cho một công cụ / lệnh / tập lệnh hỗ trợ mà bạn đã thể hiện là rất phụ thuộc vào phát hành và phân phối.
HBruijn

3
Vâng @ HBruijn đúng. Có quá nhiều biến động trên khắp Fedora, RHEL và CentOS để cung cấp một câu trả lời duy nhất, tốt hơn là chỉ ra cách tìm nó.
slm

24

Sau khi phân tích các tập lệnh trong Fedora, tôi nhận ra rằng đường dẫn tệp cấu hình được đọc từ symlink /etc/grub2.conf. Dòng đúng grub2-mkconfiglà như vậy:

grub2-mkconfig -o "$(readlink -e /etc/grub2.conf)"

Như đã lưu ý trong các nhận xét, nó có thể /etc/grub2.cfghoặc /etc/grub2-efi.cfgtrên hệ thống UEFI. Trên thực tế, cả hai liên kết có thể có mặt cùng một lúc và chỉ đến các vị trí khác nhau . Các -ecờ readlinksẽ lỗi nếu file đích không tồn tại, nhưng trên hệ thống của tôi cả hai tồn tại ... Kiểm tra lệnh của bạn, tôi đoán.


5
Trên CentOS 7, các liên kết dường như là/etc/grub2.cfg
Anthon

6
grub2-mkconfig --output = / boot / grub2 / grub.cfg dường như là cách được phê duyệt trong hướng dẫn sử dụng fedora
Kendrick

1
Để biết thêm các bước grub cụ thể của CentOS 7, hãy kiểm tra wiki chính thức: wiki.centos.org/HowTos/Grub2
sshow

2
Nếu bạn có một hệ thống UEFI bạn sẽ muốnsudo grub2-mkconfig -o "$(readlink /etc/grub2-efi.cfg)"
Craig Ringer

10

Trên Fedora tôi sử dụng:

grub2-mkconfig -o "$(readlink -e /etc/grub2.cfg)"

bởi vì thực thi không có tùy chọn để readlinktrả về một đường dẫn tương đối và grub2-mkconfigđưa ra lỗi:

$ ls -l /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 Dec 10  2015 /etc/grub2.cfg -> ../boot/grub2/grub.cfg

$ readlink /etc/grub2.cfg
../boot/grub2/grub.cfg

$ sudo grub2-mkconfig -o "$(readlink /etc/grub2.cfg)"
/usr/sbin/grub2-mkconfig: line 244: ../boot/grub2/grub.cfg.new: No such file or directory

Tôi sử dụng -etùy chọn này để nếu symlink không giải quyết được tệp tồn tại, đầu ra sẽ hiển thị trên thiết bị xuất chuẩn để tôi biết có gì đó không ổn.

Từ trang man cho readlink:

      -e, --canonicalize-existing
          canonicalize  by  following  every symlink in every component of
          the given name recursively, all components must exist

6

Trong Fedora, các liên kết tượng trưng /etc/grub2.cfg tại phiên bản BIOS. Trên hệ thống UEFI, sử dụng:

$ sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

Trong CentOS:

$ sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

Nói chung, bạn có thể sử dụng thay thế:

$ sudo grub2-mkconfig -o $(readlink -f /etc/grub2-efi.cfg)

Xem https://docs.fedoraproject.org/f27/system-adologists-guide/kernel-module-do-configuration/Working_with_the_GRUB_2_Boot_Loader.html#sec-Editing_a_Mothy_Entry


2

chỉnh sửa tệp grub bằng vihoặc vim, lưu các thay đổi và đóng trình chỉnh sửa với: wq!

Đây là những gì bạn cần chạy để cập nhật grub trong RedHat hoặc CentOS:

grub2-mkconfig -o /boot/grub2/grub.cfg

0

Các update-grubkịch bản trong Ubuntu thực sự chỉ là một stub chogrub-mkconfig , và nó có thể được điều chỉnh để distro khác mà không đau đớn. Đây là toàn bộ:

#!/bin/sh
set -e
exec grub-mkconfig -o /boot/grub/grub.cfg "$@"

Điều này thực hiện hiệu quả những gì được khuyến nghị trong wiki CentOS và trong các câu trả lời khác ở đây - sự khác biệt duy nhất là bạn cần thay đổi grubthành grub2trong lệnh và đường dẫn đầu ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.