Làm cách nào để sớm cấu hình kernel Linux để khởi động lại trong hoảng loạn?


13

Bạn có thể đặt "panic = N" trên dòng lệnh kernel để làm cho hệ thống khởi động lại N giây sau khi hoảng loạn.

Nhưng có một tùy chọn cấu hình để chỉ định điều này (ngoài tùy chọn dòng lệnh mặc định của hạt nhân) trước khi ngay cả bộ tải khởi động đi vào chơi không? Một số tùy chọn kernel có thể là?


Thông qua hệ thống con watchdog kernel, có lẽ?
Gilles 'SO- ngừng trở nên xấu xa'

Tập tin cấu hình là tập tin cấu hình boot (grub), vì nó là một tham số được gọi vào thời điểm khởi động và grub không thể được đọc từ một số tập tin cấu hình khác trong khi hệ thống tập tin không được gắn kết.
Nikhil Mulley

Tôi đoán bạn sẽ muốn khởi động lại một kernel khác? Điều đó sẽ đòi hỏi sự hợp tác từ bộ tải khởi động, và tại thời điểm đó, chắc chắn bạn sẽ có thể vượt qua các đối số dòng lệnh. Một số bộ tải khởi động có thể được thiết lập để khởi động lại vào một nhân khác nếu khởi động không thành công (bằng cách có một chương trình người dùng chỉ ra cho bộ tải khởi động rằng khởi động thành công).
Gilles 'SO- ngừng trở nên xấu xa'

Có, tôi sẽ khởi động một kernel khác hoặc cho kernel một đường dẫn rootfs khác. Có một biến trong cấu hình của bộ nạp khởi động được thay đổi khi không gian người dùng khởi động thành công; nếu nó không thay đổi, nó sẽ biết thử một cái gì đó khác biệt. Tôi đã hy vọng một cái gì đó không chỉ là dòng lệnh kernel cho điều này bởi vì cấu hình của bootloader có thể được sửa đổi bởi không gian người dùng Linux. Nếu có vấn đề, có khả năng không gian người dùng bắt đầu viết, sau đó thiết bị tắt; và có một cấu hình mặc định dự phòng cho điều đó; Tôi vẫn đang tìm kiếm sự vững chắc nhất mà tôi có thể có được điều này.
Shawn J. Goff

Câu trả lời:


2

Dường như không có một tùy chọn cấu hình như vậy. Thời gian chờ mặc định là 0 mà theo http://www.mjmwired.net/kernel/Documentation/kernel-paramameter.txt#1898 là "chờ mãi".

Tùy chọn được xác định trong kernel / panic.c , bạn có thể viết một bản vá đặt giá trị ban đầu thành một cái gì đó khác nhau.

Để mã hóa khởi động lại sau 3 giây, hãy thay đổi:

int panic_timeout;

đến:

int panic_timeout = 3;

Đó là lời khuyên tồi cho tinker với các nguồn khi có cơ chế đặc biệt: unix.stackexchange.com/a/517364/6622
poige

19

Từ man proc:

/ Proc / sys / kernel / hoảng loạn

Tệp này cung cấp quyền truy cập đọc / ghi vào biến kernel panic_timeout. Nếu đây là 0, kernel sẽ lặp lại trong hoảng loạn; nếu khác không, nó chỉ ra rằng kernel sẽ autoreboot sau số giây này. Khi bạn sử dụng trình điều khiển thiết bị theo dõi phần mềm, cài đặt được khuyến nghị là 60.


Tôi đang tìm kiếm một tùy chọn cấu hình kernel ở đây, không phải thứ gì đó từ không gian người dùng. Cụ thể, nếu vì một lý do nào đó, nó không thể gắn kết hệ thống tập tin gốc (hoặc vì một số lý do khác, không gian người dùng không bao giờ xuất hiện), tôi cần nó để khởi động lại.
Shawn J. Goff

@ ShawnJ.Goff Nếu bạn cũng lo lắng về không gian người dùng sẽ không xuất hiện, thì bạn đang hỏi sai câu hỏi (bạn muốn khởi động lại ngay cả khi kernel không hoảng loạn). Và câu trả lời là một hình thức của cơ quan giám sát theo định nghĩa; bạn cần kích hoạt hệ thống con watchdog (kích hoạt khởi động lại nếu /dev/watchdogkhông được chạm vào trong một thời gian). Xem Documentation/watchdog/watchdog-api.txt.
Gilles 'SO- ngừng trở nên xấu xa'

1
Vâng, tôi có một cơ quan giám sát. Tôi chỉ đặt càng nhiều lưới an toàn càng tốt.
Shawn J. Goff

Bất kỳ cách nào để tắt máy thay vì khởi động lại?
Ciro Santilli 心 心

Bộ tải khởi động @ ShawnJ.Goff hỗ trợ truyền tham số này từ lâu trước khi không gian người dùng được khởi động. Dù sao, hãy xem câu trả lời của tôi: unix.stackexchange.com/a/517364/6622
poige

5

Tệp cấu hình là tệp cấu hình khởi động (grub), vì nó là tham số được gọi vào thời điểm khởi động và grub không thể được đọc từ một số tệp cấu hình khác trong khi hệ thống tệp không được gắn kết.

Tuy nhiên, đó là một cài đặt được khởi tạo, thời gian chạy cũng có thể được sửa đổi thông qua sysctl. Vì vậy, về cơ bản cập nhật /etc/sysctl.confvới tham số kernel.panic = 3là cập nhật cấu hình.


1
grub không có trên tất cả các hệ thống; người tôi đang làm việc không sử dụng grub. Cấu hình bootloader của tôi được lưu trữ trong flash.
Shawn J. Goff

yeah, still .. nó có thể mount hệ thống tập tin và đọc tập tin cấu hình kernel không? nếu có, sau đó bạn đi. Bởi vì nó là bộ tải khởi động chuyển các tham số kernel cho kernel trong khi tải kernel.
Nikhil Mulley


3

Trong Linux Kernel, (tôi đã thấy trong 3 trở lên) có tùy chọn trong .config. CONFIG_PANIC_TIMEOUTlà tham số và mặc định là 0. Trong các phiên bản kernel Linux này, câu trả lời của Lekensteyn cũng sẽ hoạt động. Nhưng biến đó là lấy từ .configduy nhất.

int panic_timeout = CONFIG_PANIC_TIMEOUT;

1

Hỗ trợ nhân Linux CONFIG_CMDLINE_BOOL

Cho phép chỉ định đối số khởi động cho kernel khi xây dựng. Trên một số hệ thống (ví dụ: các hệ thống nhúng), cần phải cung cấp một số hoặc tất cả các đối số khởi động kernel với chính kernel (nghĩa là không dựa vào bộ tải khởi động để cung cấp cho chúng.)

Có một số ví dụ ngay cả trên "cổng thông tin" này, ví dụ như

/superuser/778826/config-cmdline-override-set-but-hardcoding-vga-boot-parameter-ignored



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.