Khi nào cần khởi động lại?


27

Ngoài việc nâng cấp kernel, có bất kỳ thay đổi nào đối với hệ thống Linux yêu cầu khởi động lại không? Tôi biết có những tình huống khởi động lại giúp mọi thứ dễ dàng hơn, nhưng có tình huống nào không thể thực hiện được ngoại trừ khởi động lại không?

Để làm rõ: Tôi đang nghĩ về một hệ thống máy tính để bàn hoặc máy chủ điển hình không bị trục trặc phần cứng.


3
mọi thứ có thể được thực hiện mà không cần khởi động lại. thậm chí thay đổi kernel có thể được thực hiện bằng ksplice để bạn có thể trao đổi nóng kernel của mình. Điều duy nhất bạn cần tính đến là thực tế mọi thứ mà không cần khởi động lại có thể rất phức tạp
Kiwy

4
Câu hỏi của bạn rất rộng, vì "hệ thống Linux" có thể có nghĩa là nhiều thứ rất khác nhau.
Zrin

Ngoài ra "bất kỳ thay đổi" có thể có nghĩa là khá nhiều tình huống khác nhau. Có phải phục hồi từ ổ cứng bị lỗi là một phần của gương MD thay đổi như vậy không? Nếu có, thì - thật không may - đôi khi nó sẽ yêu cầu khởi động lại, vì ví dụ một số lỗi ổ cứng (trên một số bộ điều khiển ổ cứng) có thể khiến hệ thống không phản hồi. Nhưng có lẽ bạn không hỏi về những "thay đổi" như vậy ...
Zrin

3
@Kiwy Về mặt kỹ thuật ksplice không thay đổi kernel . Ksplice cho phép một kernel đang chạy được vá, trong khi nó đang chạy. Bạn có thể nghĩ về kexec , cho phép một hình ảnh hạt nhân mới được tải "qua" một hạt nhân đang chạy trong bộ nhớ.
Thomas Nyman

Điều này nhắc nhở tôi, windows XP (tôi chưa bao giờ vượt qua) không bao giờ tắt về việc khởi động lại ngay cả khi nó chỉ cập nhật IE8 (hoặc bất kỳ số nào) đã được mở trong 4 năm, kể từ khi cài đặt Windows và do đó cần phải tải xuống trình duyệt.
Shahbaz

Câu trả lời:


44

Một vài điều đến với tâm trí:

  • Phục hồi từ một hoảng loạn hạt nhân

    Theo định nghĩa, một hoảng loạn kernel, không thể được phục hồi mà không khởi động lại kernel.

  • Khôi phục từ các hang mà rời khỏi bạn mà không có quyền truy cập thiết bị đầu cuối

    Nếu hệ thống không phản hồi và bạn bị mắc kẹt mà không có cách nào để ra lệnh để khôi phục, điều duy nhất bạn có thể làm là khởi động lại. Thông thường, bạn muốn tránh việc đạp xe bằng tay. Đối với các loại tình huống này, nhân Linux có hỗ trợ Magic SysRq có thể được sử dụng để khởi động lại máy trong trường hợp khẩn cấp.

    Miễn là CONFIG_MAGIC_SYSRQtùy chọn đã được bật trong cấu hình kernel và kernel.sysrq sysctltùy chọn được bật, bạn có thể ra lệnh trực tiếp cho kernel bằng tổ hợp phím SysRq ma thuật:

    Lưu ý rằng Alt+ SysRqbên dưới có nghĩa là nhấn và giữ Alt , sau đó nhấn và giữ SysRq (thường là PrintScrnphím).

    1. Alt+ SysRq+ r: lấy lại quyền kiểm soát bàn phím
    2. Alt+ SysRq+ e: gửi SIGTERMđến tất cả các quy trình, ngoại trừ init, cho họ cơ hội chấm dứt một cách duyên dáng
    3. Alt+ SysRq+ i: gửi SIGKILLđến tất cả các quy trình, ngoại trừ init, buộc chúng phải chấm dứt
    4. Alt+ SysRq+ s: cố gắng đồng bộ hóa tất cả các hệ thống tệp được gắn
    5. Alt+ SysRq+ u: kết nối lại tất cả các hệ thống tập tin chỉ đọc
    6. Alt+ SysRq+ b: khởi động lại, hoặc

      Alt+ SysRq+ o: tắt máy

    Một bản ghi nhớ cho các tổ hợp phím SysRq ma thuật để thử khởi động lại duyên dáng là:

    " R eboot E ven I f S ystem U tterly B roke "

    Đối với các máy chủ không đầu, thậm chí còn có một mục tiêu iptables cho phép các chuỗi SysRq từ xa qua mạng.

  • Phục hồi từ trạng thái không thể khởi động

    Nếu hệ thống đã được đưa đến trạng thái không thể khởi động thường xuyên (ví dụ như do nâng cấp hệ thống không thành công, hệ thống tệp bị hỏng, v.v.), thì cách duy nhất để truy cập bảng điều khiển khôi phục trên hệ thống có thể là khởi động lại sử dụng các tùy chọn thời gian khởi động thích hợp.

  • Thay đổi tham số kernel thời gian khởi động

    Một số tham số kernel (ví dụ auditđể bật / tắt kiểm tra kernel) chỉ có thể được đặt khi kernel được tải vào lúc khởi động.


3
"Khởi động lại ngay cả khi hệ thống hoàn toàn bị phá vỡ" Tôi chỉ thích câu hỏi này, nhưng tôi không nghĩ mình sẽ quên điều đó.
embedded.kyle

1
Có thể đáng chú ý là bạn có thể thoát khỏi hoảng loạn bằng cách sử dụng kexec và tránh khởi động lại hoàn toàn. Điều này cũng áp dụng như nhau để thoát khỏi điểm trạng thái không thể khởi động. (chúng không giống nhau bằng bất kỳ phương tiện nào, ít nhất là trên hệ thống x86). Tuy nhiên +1 cho phần còn lại của câu trả lời này.
Vality

@Vality Cảm ơn bình luận của bạn. Nếu kexec đòi hỏi phải khởi động lại có lẽ phụ thuộc vào một mức độ nhất định vào quan điểm của những người đó. Các tài liệu kdump ví dụ mô tả kexec-on-hoảng loạn như một khởi động lại mà giữ gìn hình ảnh bộ nhớ hệ thống hạt nhân của. Về điểm về trạng thái không thể khởi động, tôi cũng đã xem xét những thứ như cấu hình sai của bộ tải khởi động (ví dụ: không tải được kernel ở vị trí đầu tiên), trong đó kexec không giúp ích gì. Với bản chất của câu hỏi, tôi nghĩ rằng một số khác biệt về quan điểm liên quan đến ngữ nghĩa là không thể tránh khỏi.
Thomas Nyman

@ThomasNyman Cảm ơn bạn đã trả lời chi tiết, nhìn vào câu hỏi bạn đúng tôi cảm thấy. Tôi nghĩ rằng nói về kexec có lẽ sẽ chỉ làm phức tạp mọi thứ cho đối tượng mục tiêu hoặc câu hỏi này. Và bạn cũng có một điểm tốt liên quan đến lỗi boot-loader.
Vality

Tôi chưa bao giờ nhận thấy rằng SysRq nhỏ được viết dưới màn hình in! Điều này thật tuyệt. Tôi ước tôi đã biết điều này khi tôi đang học lập trình mô-đun hạt nhân!
Shahbaz

2

Có hai lần tôi có thể nghĩ về nơi tôi muốn khởi động lại:

  1. Khi tôi cần đảm bảo rằng hệ thống có thể khởi động ở trạng thái thích hợp.

    Tôi đã từng làm việc trên một hệ thống có một số daemon được cấu hình trong khi nó đang chạy. Sau khi nó chạy được vài năm, một sự cố mất điện đã khiến nó khởi động lại, nhưng trình nền không phải là một phần của quá trình khởi động và không ai biết được nó đã được cấu hình như thế nào nhiều năm trước. Hệ thống đã ngừng hoạt động trong nhiều ngày trong khi chúng tôi tìm ra cách cấu hình lại nó.

    Trên thực tế, khởi động lại là cách duy nhất để biết chắc chắn rằng hệ thống của bạn sẽ khởi động lại đúng cách sau khi mất điện.

  2. Khi một thư viện hệ thống đã được cập nhật.

    Hãy nói rằng một lỗ hổng bảo mật lớn đã được phát hiện trong một thư viện được chia sẻ với nhiều ứng dụng / máy chủ trên hệ thống. Bạn có thể cập nhật thư viện mà không cần khởi động lại, nhưng có bao nhiêu quá trình vẫn đang chạy với thư viện không an toàn được tải? Bạn có thể khởi động lại bất cứ thứ gì bằng thư viện cũ (nếu bạn có thể tìm ra), nhưng đó là lỗi dễ xảy ra và có thể mất nhiều thời gian hơn là chỉ khởi động lại.

    Khởi động lại là cách tốt nhất để đảm bảo rằng tất cả các quy trình đang chạy vẫn không sử dụng thư viện lỗi cũ.


Có nhiều cách tốt hơn để tìm tất cả các nhị phân tùy thuộc vào một thư viện nhất định nếu bạn sử dụng trình quản lý gói tốt. revdep-xây dựng lại từ Gentoo đến với tâm trí.
Spidey

1
@Spidey: Một khi bạn xây dựng lại các nhị phân đó, làm thế nào để bạn đảm bảo rằng không có quy trình cũ nào chạy với thư viện lỗi?
Gabe

1
Làm thế nào để bạn biết những trình tiện ích nào có các thư viện vi phạm được tải?
Gabe

1
@Gabe Chẳng hạn, bạn có thể kiểm tra các quá trình nào các thư viện được ánh xạ vào không gian bộ nhớ của chúng bằng cách sử dụng lsoftrước khi bạn nâng cấp các thư viện.
Thomas Nyman

1
@Gabe Chắc chắn, và mặc dù tôi đồng ý rằng đó là một lý do hoàn toàn chính đáng để khởi động lại, OP rõ ràng không hỏi trong trường hợp nào việc khởi động lại là thuận tiện hơn, nhưng khi khởi động lại là hoàn toàn cần thiết .
Thomas Nyman

0

Nếu bạn có nghĩa là thay đổi theo kế hoạch trong cấu hình phần mềm và giả sử phần cứng hoạt động hoàn hảo (tôi chưa thấy như vậy) và phần mềm không có lỗi (bạn biết ...), thì chỉ một lỗi trong kernel hoặc trình điều khiển sẽ buộc bạn phải khởi động lại. :)

Khác với điều đó ... Tôi không chắc liệu có thể thay thế initmà không chuyển sang chế độ người dùng đơn lẻ và thực hiện một số phép thuật về cơ bản không khác nhiều so với khởi động lại.

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.