Senza entrare nello specifico, abbiamo seguito un caso di un cliente (si parla di grandi macchine), un collega ed io, a cui crashava una macchina ogni due per tre. Abbiamo analizzato il primo crash dump, c'era un problema con un puntatore nullo che riguardava una certa area della memoria; poi un secondo crash, qui puntatore che aveva a che fare con la parte delle irq (interrupts) e così via altri a seguire...
Alla fine della fiera abbiamo totalizzato N vmcore da guardare (con N > 7) dove il 60% mostrava più o meno un pattern, erano simili, e altri erano proprio in zone diverse (ie. interrupts, boot, task_struct, stack di un task_struct, etc).
Ci siamo resi conto che tutti gli indirizzi corrotti (eg. in cui un puntatore faceva riferimento a zone della memoria non accessibili, troppo alte) erano bene o male in un range molto ristretto di indirizzi fisici; cioè, l'indirizzo di memoria che è virtuale, tradotto in fisico, era più o meno nella stessa zona (forse era anche la stessa pagina, non mi ricordo, ma era comunque adiacente).
Abbiamo concluso fosse un problema HW. Hanno testato la RAM ed hanno trovato un modulo danneggiato; poi hanno proseguito a testare l'hw ed hanno trovato una delle cache di una delle CPU con problemi, sino a riscontrarne altri ancora dopo giorni (e altri crash dump, dicendoci "ok, tutto risolto ma crasha ancora").
Questo per dire che è un'area complessa, non c'è solo una cosa che può andare male, non tutti gli errori si riescono a correggere; ogni tanto si vedono single-bit error o parity error che causano crash, anche. Mi è anche capitato di vedere bit-flip a volte, causati da problemi HW... e non sempre vengono poi trovati immediatamente.
Non so poi che usano i vari tecnci HW, ma presumo utilizzino direttamente la strumentazione collegata all'hw per beccare certe cose.