Je dédie spécialement ce billet à bompi que la « Dentelle de Bruges » ne laisse pas insensible
Jean , quant à lui, ne m'en voudra pas, j'en suis sûr, si je m'en viens ajourer d'un ornement spéculatif la dentelle serrée de ses commandes...
Au démarrage d'un Mac sous «
Lion», l'
EFI (
Programme Interne de la Carte-Mère) exécute le fichier démarreur
boot.efi de l'OS (at:
/System/Library/CoreServices/boot.efi) - lequel charge un Cache-Système de démarrage : le
kernelcache (at:
/System/Library/Caches/com.apple.kext.caches/Startup/kernelcache). Ce
kernelcache consiste en un clone du code du
kernel original (at:
/mach_kernel) solidaire d'un bloc-d'adressage des
kexts (at:
/System/Library/Extensions). En
mode cache, le démarreur
boot.efi lance le
kernel, et lui injecte les
kexts en tant que bloc a priori validé ("
all_loaded"), càd. selon une instruction équivalant à : ne pas avorter le chargement de l'ensemble en cas d'exceptions réfractaires au chargement, mais s'efforcer de les échapper.
Si, par l'intermédiaire d'«
Onyx», on choisit de "
Supprimer les caches de démarrage", cela revient à dire qu'on détruit le
kernelcache qui permet au démarreur
boot.efi d'opérer un démarrage du Système en
mode cache, avec neutralisation des exceptions au profit du chargement du bloc des extensions valides. Le démarrage s'opèrera alternativement alors en
mode sériel : le
boot.efi commencera par activer le
kernel original (
/mach_kernel), puis lancera une injection des
kexts en mode "discret" (l'une après l'autre) sans instruction d'échapper les exceptions inchargeables au profit du chargement de l'ensemble. Il s'ensuit qu'à la première exception (=
kext inchargeable), le
kernel plantera.
Une option de démarrage préconisée en cas de
kernel qui plante au
boot est le démarrage en
Safe_Mode (dit : "Sans échec" ou encore mal dit : "Sans extensions" - touche ⇧ pressée au départ) : ce type de démarrage force la réparation du système de fichiers de l'OS + supprime le cache de démarrage
kernelcache + soustrait a priori de la liste des
kexts à injecter au
kernel terme à terme les extensions de
tierce-partie (non natives Apple). La différence avec la suppression simple du cache de démarrage
kernelcache (via «
Onyx» par exemple), est qu'il y a réduction des
kexts à charger isolément au sous-ensemble des extentions Apple.
Par rapport au démarrage régulier en
mode cache (chargement du
kernelcache par le
boot.efi), le démarrage en
Safe_Mode est à double-tranchant : la non-activation des extensions de Tierce-Partie (non-injection dans le
kernel) peut sauver un démarrage en cas d'extension tierce invalide ; mais en cas d'extension Apple invalidée, sa tentative d'injection solitaire dans le
kernel sans instruction d'échappement en cas d'exception au profit de l'ensemble validé a priori va conduire à un plantage sans appel. L'instruction d'échappement des exceptions en cas de démarrage en
mode cache (
kernelcache) privilégiant au contraire le chargement "holistique" sur les échecs "particuliers".
En bref : au cas où le ratatouillage indéfini au démarrage (roue crantée giratoire qui n'en finit pas de tourner) signale un échec du
kernel à charger les extensions, comme le
kernelcache a été supprimé via «
Onyx», on a donc affaire à un mode de démarrage de type "sériel" : le
boot.efi active le
mach_kernel, puis lui injecte les
kexts terme à terme sans instruction d'échappement des exceptions. Ce serait donc sur une
kext douteuse que le
kernel partirait en boucle. Comme une sauvegarde
TimeMachine ne sauvegarde pas (à ma connaissance) le cache de démarrage
kernelcache, tenter de restaurer le Système du disque du Mac d'après elle ne peut que faire se répéter à l'identique la situation actuelle de blocage d'une injection sérielle des extensions.
Alors de 2 choses l'une : soit c'est une
kext de tierce-partie (non Apple) qui bloque, et alors un démarrage en
Safe_Mode peut, en la désactivant au démarrage, permettre au
kernel de compléter son chargement des extensions, et lancer le processus
launchd responsable du déploiement Logiciel. Soit c'est une
kext native (Apple) qui est en cause et alors, comme on ne sait pas laquelle c'est (ce qui permettrait de la recopier d'après son équivalent intègre du dossier des
Extensions du Système de la «
Recovery HD») => une ré-installation globale du Système paraît la meilleure solution. Soit les 2 dernières préconisations de
Jean :
Tu peux essayer de démarrer en mode sans échecs (touche MAJ appuyée lors du boot)
Sinon il faudrait réinstaller le système.
Si le problème ne provient pas d'un échec d'injection d'une extension dans le
kernel au démarrage, mais d'un échec de
launchd à effectuer ensuite le déploiement Logiciel, alors la récupération de la sauvegarde
TimeMachine pourrait dans ce cas régler le problème.
Comme normalement une sauvegarde
TimeMachine sur un DDE connectable au Mac est
démarrable, pourquoi ne pas tenter ce démarrage (touche "
alt" pressée au
boot) ? Si le démarrage se fait, restaurer la sauvegarde démarrable au disque du Mac devrait permettre le re-démarrage. Si elle ne démarre pas, c'est que l'injection sérielle des
kexts dans le
kernel (le démarrage en
mode cache étant forclos) bloque exactement sur la même butée que le démarrage du Mac - puisque la sauvegarde est dans ce cas un miroir exact du problème. Alors, retour à l'alternative décrite ci-dessus...