No caso geral, não, não é possível, porque nada do estado anterior pode ser confiável e não pode ser distinguido de uma reinicialização regular.
Apenas diga, por exemplo, que você tem um sistema que NÃO limpa a RAM na inicialização (a limpeza da memória na inicialização é necessária por algumas especificações de inicialização segura, etc.); O processo de inicialização inicial e todas as reinicializações normais geralmente ocorrem nos mesmos deslocamentos e limpam tudo, desde a inicialização anterior ao longo do tempo. O próprio kernel quase sempre será carregado no mesmo endereço.
Agora considere o kexec em vez de uma reinicialização normal, e perceba que tudo deve acabar com os mesmos deslocamentos e ser indistinguível.
Existem casos especiais em que o kexec CAN pode ser detectado? SIM!
- O Kdump carrega explicitamente o novo kernel em um endereço diferente e espera preservar a memória do kernel anterior para capturar erros estado.
- Se o BIOS e o kernel inicializarem o hardware de forma diferente, (obviamente) pode ser notado, já que haveria mudanças em cada inicialização com a opção "usual / kexec".
- Como um exemplo específico disso, o buffer de quadros EFI é definitivamente alterado pelo kernel durante a inicialização, e nunca retorna ao original estado em kexec.
- O corolário disso é que, se você não controlar a inicialização do kernel kexec'd, e ele toca o hardware, não há praticamente nenhuma maneira para depois decidir se era uma inicialização real ou uma inicialização kexec .
Como uma demonstração, inicializei uma VM com um kernel, capturei o dmesg, então imediatamente fiz um hard kexec nele, capturei o dmesg novamente. Aqui está a diferença entre as duas execuções do dmesg: link