Làm thế nào tôi có thể khắc phục sự cố hoảng loạn hạt nhân?


7

My Raspberry Pi 3 đã hoạt động ổn định trong một năm nay với tư cách là một máy chủ không đầu. Trong tháng trước, nó đã bắt đầu gặp sự cố thường xuyên (cứ sau hai ngày). Tôi có thể đính kèm một màn hình và thấy rằng đã có một sự hoảng loạn hạt nhân. Tuy nhiên, tôi không chắc làm thế nào để diễn giải đầu ra, không có nhật ký và đầu ra trên màn hình đã được cuộn lên.

Dưới đây là hình ảnh của hai hoảng loạn hạt nhân riêng biệt. (Xin lỗi vì ảnh; không có nhật ký văn bản.)

Hoảng loạn 1 Hoảng loạn 2

Có cách nào để xem toàn bộ nhật ký không và làm cách nào để khắc phục sự cố hoảng loạn kernel?

(Ngoài ra, rõ ràng vấn đề là gì từ những bức ảnh này? Vì nền tảng, điều này thường xảy ra lúc 3 giờ sáng, đó là khi sao lưu rsync (backintime) tự động xảy ra. để sử dụng RPi 3 mới, tăng âm fscklượng và cập nhật kernel từ 4.4.35-v7+sang 4.9.65-v7+, sử dụng rpi-update.)


Sự hoảng loạn không liên tục, không giải thích được, hạt nhân mới được phát triển mà không có thay đổi phần mềm tương quan sẽ chỉ ra các vấn đề phần cứng. Rằng nó liên quan đến việc rsyncchỉ ra lỗi thẻ SD. Họ có số lượng r / w giới hạn và 1 năm sử dụng nhiều có thể làm điều đó. Ngay cả khi bạn sử dụng ổ đĩa ngoài cho dữ liệu, vẫn có khả năng hỏng / hỏng thẻ SD sẽ gây ra điều này. Các khả năng phần cứng khác là RAM xấu và các lỗi khác.
crasic

Cảm ơn @crasic. Tôi nghĩ rằng nó có thể không phải là RAM hoặc phần cứng khác, vì tôi đã thử nghiệm với một RPi khác và nó vẫn bị hỏng. Tuy nhiên, tôi đã mang theo thẻ SD, vì vậy tôi sẽ thử khôi phục từ bản sao lưu và xem liệu nó có còn gặp sự cố không. Việc sao lưu không liên tục, vì vậy tôi cho rằng thẻ SD không bị hỏng một cách rõ rệt trong bất kỳ lĩnh vực cụ thể nào, nhưng dù sao cũng đáng để thay đổi.
Sparhawk

Câu trả lời:


5

Có cách nào để xem toàn bộ nhật ký ...?

Raspberry Pi của bạn thường có bảng điều khiển nối tiếp được bật (hoặc có thể được định cấu hình để có bàn điều khiển nối tiếp) trên một trong các UART tích hợp, được hiển thị trên các chân GPIO 14 và 15. Với cáp thích hợp (như thế này ), bạn có thể kết nối điều này lên một máy tính khác và ghi nhật ký tất cả đầu ra vào một tệp. Điều này làm cho nó dễ dàng hơn để xem / sao chép / dán, vv

Tài liệu này nói về cách kích hoạt bảng điều khiển nối tiếp trong các phiên bản gần đây hơn của Raspbian.

Trang này đi vào chi tiết hơn về các cổng nối tiếp.

... và làm thế nào để tôi gặp rắc rối hạt nhân?

Đó là một nghệ thuật đen mà tôi không phải là chuyên gia đặc biệt.


Câu trả lời xuất sắc (+1). Tôi sẽ chờ xem liệu có phản hồi cho phần thứ hai không, vì nó có thể không đáng để tôi cài đặt phần đầu tiên nếu khó khắc phục sự cố. (Mặc dù phải thừa nhận rằng tôi có thể cần thực hiện phần đầu tiên để biết điều đó.)
Sparhawk

4

Địa chỉ điểm 2

... và làm thế nào để tôi gặp rắc rối hạt nhân?

Một hoảng loạn hạt nhân chỉ là một sự cố bên trong hạt nhân. Một sự cố gây ra bởi bất kỳ số lỗi phần mềm hoặc phần cứng thông thường.

Gỡ lỗi kernel không khác gì bất kỳ phần mềm nào khác. Một số kết hợp của

  • Kiểm tra thông điệp tường trình
  • Kiểm tra dấu vết ngăn xếp
  • Sử dụng Trình gỡ lỗi với Điểm dừng
  • Fault Isolation (tước / vô hiệu hóa các thành phần phần mềm cho đến khi chỉ có phần lỗi vẫn chạy)

Một tùy chọn bổ sung cho hạt nhân

  • Theo dõi các cấu trúc giám sát nội bộ bên dưới /proc//sys/, điều này có thể giúp bạn, ví dụ, theo dõi các xu hướng (ví dụ: số lượng ngoại lệ tăng trước khi gặp sự cố, tăng đột biến tải CPU, Rất nhiều lần hoán đổi / chuyển đổi ngữ cảnh). Nhưng đây là thông tin gỡ lỗi rất chất lượng và "không phải thời gian thực".

Thật không may, vì kernel chạy hệ thống nên khó gỡ lỗi hơn mã không gian người dùng. Nhật ký tin nhắn là khá nhiều tất cả những gì bạn thực sự có fr

Có thể gỡ lỗi mã hạt nhân của riêng bạn tại chỗ , khi bạn biết nó đang làm gì và sai ở đâu khi sử dụng ghi nhật ký chi tiết và gỡ lỗi log-bassed khác trong mô-đun / kernel tùy chỉnh của bạn, nhưng chẩn đoán sự cố gián đoạn trong một trình biên dịch trước hạt nhân phát hành là khá nhiều ra khỏi câu hỏi. Bạn sẽ không làm gì tốt hơn là đăng nhập mà không cần phần cứng bổ sung

Bạn cần một giao diện phần cứng để chạy gỡ lỗi, trong thế giới nhúng, cái này được gọi là In Circuit Emulation( ICE ) và thường đạt được bằng cách sử dụng JTAGgiao diện


Cụ thể, bạn sẽ cần sử dụng JTAG, đó là giao diện gỡ lỗi phần cứng. Điều này cho phép một người đặt điểm dừng và ngắt CPU bằng phần cứng bên ngoài.

Khi được thiết lập chính xác, bạn có thể JTAGdễ dàng sử dụng với gdbviệc chạy trên PC chủ để gỡ lỗi các nhân linux nhúng. Việc sử dụng giống hệt với việc sử dụng gdbvới bất kỳ ứng dụng nào khác, nhưng giao diện là phần cứng.

Bạn sẽ sử dụng thiết lập này

  • "bắt" (phá vỡ) những cơn hoảng loạn hạt nhân này trước khi chúng xảy ra
  • Điểm dừng sẽ tạm dừng CPU
  • Bước CPU thông qua lệnh sự cố bằng lệnh
  • Kiểm tra tất cả bộ nhớ được sửa đổi / thay đổi
  • Kiểm tra bộ nhớ và ngăn xếp CPU bằng trình gỡ lỗi của bạn
  • Sử dụng thông tin này để xác định nguyên nhân gốc của sự cố

Hướng dẫn tài nguyên tốt: https://www.elinux.org/Debugging_The_Linux_Kernel_Using_Gdb

Lưu ý rằng ngay cả điều này có thể không đủ, có nhiều vấn đề chỉ xảy ra khi mọi thứ đang chạy "ở tốc độ", nghĩa là sự can thiệp của trình gỡ lỗi hoặc thậm chí các thông điệp nhật ký bổ sung có thể thay đổi hệ thống đủ để che giấu hoặc che giấu lỗi.

Nói ngắn gọn

Đó là một nghệ thuật hơn là một khoa học


Nhật ký của bạn thực sự bị cắt ngắn. Tôi nghi ngờ bạn có một lỗi phần cứng gây ra ngoại lệ CPU chưa được xử lý gây ra sự cố / hoảng loạn hạt nhân.

Một tình huống rất phổ biến là bộ nhớ không liên tục / hỏng / hỏng khiến một lệnh không chính xác được nạp vào CPU gây ra ngoại lệ.


Cảm ơn câu trả lời (+1). Tôi nghĩ rằng ngôn ngữ của tôi trong câu hỏi không rõ ràng, vì vậy tôi sẽ chỉnh sửa nó, nhưng tôi đã thử nghiệm một Pi (mới) khác với cùng kết quả, vì vậy tôi nghĩ rằng nó không có khả năng là bộ nhớ / RAM. Có vẻ như việc khắc phục sự cố rất khó khăn, vì vậy tôi sẽ thử nhận xét của bạn và thẻ SD mới, vì điều đó tương đối dễ đạt được.
Sparhawk

Một mẹo bổ sung và rất hiệu quả là mở rộng việc gỡ lỗi của bạn vào thế giới thực. Có rất nhiều thứ bạn có thể làm với máy hiện sóng và chân GPIO dự phòng để báo hiệu sự thay đổi trạng thái, đo thời gian và chỉ ra các giá trị của các biến nội bộ - với nhiễu loạn
tối thiểu

@Sparhawk Tôi thường sử dụng "bộ nhớ", nếu dữ liệu SD bị hỏng hoặc đọc không chính xác khi được lưu vào bộ đệm, hiệu ứng sẽ giống như khi RAM bị hỏng.
crasic

FWIW vấn đề của tôi biến mất khi tôi đổi thẻ SD! Cảm ơn vì tiền hỗ trợ!
Sparhawk
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.