Trong trường hợp chung, không, điều đó là không thể, bởi vì không có gì đáng tin cậy ở trạng thái trước đó và không thể phân biệt được với khởi động lại thông thường.
Chỉ cần nói ví dụ bạn có một hệ thống KHÔNG xóa RAM khi khởi động (xóa bộ nhớ khi khởi động được yêu cầu bởi một số thông số khởi động an toàn, v.v.); Quá trình khởi động ban đầu và mỗi lần khởi động lại bình thường thường sẽ xảy ra ở cùng một độ lệch và xóa sạch mọi thứ từ lần khởi động trước theo thời gian. Hạt nhân sẽ hầu như luôn được tải tại cùng một địa chỉ.
Bây giờ hãy xem xét kexec thay vì khởi động lại bình thường và nhận ra rằng mọi thứ sẽ kết thúc ở cùng một độ lệch, và hầu như không thể phân biệt được.
Có trường hợp đặc biệt nào mà kexec CÓ THỂ được phát hiện không? ĐÚNG!
- Kdump tải rõ ràng kernel mới tại một địa chỉ khác và hy vọng sẽ bảo toàn bộ nhớ của kernel trước đó để nắm bắt trạng thái lỗi.
- Nếu BIOS và kernel khởi tạo phần cứng khác nhau thì rõ ràng (rõ ràng) có thể được ghi nhận vì sẽ có thay đổi trên mỗi lần khởi động với công tắc "thường / kexec".
- Như một ví dụ cụ thể về điều này, bộ đệm khung EFI chắc chắn bị thay đổi bởi kernel trong khi khởi động và không bao giờ trở lại trạng thái ban đầu trên kexec.
- Hệ quả của điều này là, nếu bạn không điều khiển khởi động của kernel kexec'd và nó chạm vào phần cứng, thì gần như không có cách nào để quyết định xem đó là boot thật hay boot kexec .
Như một bản demo, tôi đã khởi động một VM với kernel, bắt dmesg, sau đó ngay lập tức thực hiện một kexec cứng trên nó, bắt dmesg một lần nữa. Đây là sự khác biệt giữa hai lần chạy của dmesg: https://gist.github.com/robbat2/7609be2715591eac8ace3f46e852c549
cat /proc/cmdline
?