Prose de (sapin de) Noël ornée de culs-de-lampe en guise de boules
Jean &
zeltron, qui avez (
Ave !) vainement naguère invoqué -
voces clamantes in deserto - le nom de
macomaniac sans que ce dernier fasse acte de présence dans ce fil.
Il y a à cette carence une raison - peut-être pas « excellente » - à tout le moins « dirimante » : il suffit que j'entrevoie dans le titre d'un fil le terme «
Time Machine» pour qu'instantanément je m'en détourne sans l'ouvrir. Je suis « structuraliste » - je n'ai aucun goût pour l'« histoire ». C'est la « géographie logique » des systèmes qui m'importe, non la « succession temporelle de leurs états ». En guise d'effet mineur : je sauvegarde par un clone en écrasant à chaque reclonage les variantes antérieures du système par les actuelles ; je ne sauvegarde pas en mode historiciste une succession de tranches d'époque du système de l'OS dont je n'ai que faire.
Pour les raisons susdites, je suis resté dans une complète ignorance de ce fil, jusqu'à dimanche (hier) où je ne sais quelle erreur de clic
- par l'effet d'inattention de l'oisiveté dominicale - m'a fait ouvrir cet espace livré à la désolation pour découvrir que son auteur était
Jean : un expert, inattendu dans cette position de demandeur. Il n'en fallait pas davantage pour piquer ma curiosité et susciter une première : ma lecture d'un fil consacré à «
TimeMachine» !
Mais en fait la « Main Invisible de la Providence » veillait, car ce fil ne concernait pas «
TimeMachine» dans sa perspective « historiciste », mais dans une perspective « structurale » : une sauvegarde considérée comme un « Système démarrable », càd. assimilée à un clone. J'étais donc en terrain familier...
Eh bien ! J'annonce que le problème est
résolu, aussi bien «
théoriquement » que «
pratiquement »
. Au risque d'étirer ce billet en « longitude », j'expose ma démarche dans un petit morceau de prose « logico-spéculative ».
♤
Ayant un
MacBook Pro Early_2011 dont le SSD interne de 1 To comporte de nombreuses partitions, dont autant de démarrables que d'OS de «
Snow Léopard» à «
El Capitan», et ayant sous la main plusieurs DDE : [SSD x Thunderbolt] permettant des expérimentations express, j'ai donc successivement créé 2 sauvegardes
TimeMachine (en 10' chacune) : une de mon volume
El Capitan sur un de ces DDE, une autre de mon volume
Yosemite sur un autre de ces DDE (en démarrant successivement sur chacun de ces OS).
Cela fait, en re-démarrant avec "
alt", il s'est avéré que la sauvegarde
TimeMachine:
Yosemite démarrait bel et bien ; tandis que la sauvegarde
El Capitan, comme dans l'expérience de
Jean, conduisait au signe
d'interdiction de stationner ∅. Ce qui m'a conduit sur mon terrain d'exercice favori : la « logique spéculative ».
En quoi consistait le mécanisme logique de démarrage de la sauvegarde démarrable : celle de «
Yosemite» ? Facile : une fois le démarrage effectué, s'affiche un écran identique à celui obtenu par le démarrage sur la «
Recovery HD» (la fenêtre des 4
Utilitaires OS X). Une sauvegarde
TimeMachine ne doit pouvoir démarrer
comme une partition de récupération «
Recovery HD», que parce qu'elle doit comporter le même dispositif de démarrage : un dossier de boot
com.apple.recovery.boot contenant les mêmes
Boot_Files. Une inspection du contenu du dossier de sauvegarde
Backups.backupdb sur le volume du DDE m'a révélé 2 répertoires : un répertoire invisible
.RecoverySets et un répertoire visible de l'intitulé du Mac-Hôte (chez moi :
MacBook Pro).
Le répertoire du Mac contient, en descendant de 2 crans dans une arborescence, un dossier du même intitulé que le Volume d'
El Capitan source de la sauvegarde. Ce dossier contient absolument les mêmes éléments (à part quelques exclusions) que le volume
El Capitan en tant que sauvegarde paradigme : c'est donc l'exact équivalent d'un
clone du système.
Le répertoire
.RecoverySets de son côté contient un sous-répertoire
0 qui recèle le dossier classique de démarrage d'une «
Recovery HD» : le
com.apple.recovery.boot. Ce dernier, ouvert, est rigoureusement la copie-conforme dans ses éléments de celui de la «
Recovery HD» : 7 éléments (dans l'ordre alphabétique) =>
BaseSystem.chunklist,
BaseSystem.dmg,
boot.efi,
com.apple.Boot.plist,
kernelcache,
PlatformSupport.plist,
SystemVersion.plist.
Je suis familier de ce dispositif et il ne me pose aucun problème logique. Le fichier
boot.efi est le
boot_loader exécuté par l'
EFI qui lui passe la main. Les fichiers
.plist sont lus par le
boot.efi, à fin préalable de validation de la compatibilité de la machine (
PlatformSupport.plist) avec le Système à démarrer (
SystemVersion.plist) et à fin de charger les chemins de
boot (
com.apple.Boot.plist). Le
kernelcache est le cache de démarrage qui combine un code cloné de l'original du
kernel et le bloc des
kexts => le
boot.efi va lancer le
kernel et l'injection des
kexts dans le
kernel, tout en lui passant une instruction secondaire (chargée à la lecture du fichier
com.apple.Boot.plist) qui est le mode d'accès au Système à démarrer ensuite : il s'agit d'une instruction de montage du disque virtuel
BaseSystem.dmg en un volume
OS X Base System recelant un
OS X allégé, dont le
kernel déclenchera le chargement exactement comme pour le Système d'
OS X. Le fichier
BaseSystem.chunklist, pour sa part, est la liste des ressources (
load ou
chunk) contenues dans le
BaseSystem.dmg : il n'a pas d'usage en terme de
boot, mais s'il s'agit de (re)créer un dossier de
boot :
com.apple.recovery.boot via l'exécutable Apple
dmtest.
Bref : une sauvegarde
TimeMachine dépouillée de sa problématique « historiciste » et ramené à la problématique « structuraliste » d'un « Système démarrable », peut se décrire comme la coexistence d'un
clone du volume d'
OS X qui ne joue aucun rôle en terme de démarrage, mais qui constitue un paradigme autorisant un rétro-clonage + un dossier de
boot identique à celui d'une «
Recovery HD» (
com.apple.recovery.boot) qui constitue exclusivement le dispositif de démarrage : une «
Recovery TM» en quelque sorte.
♧
Il se laisse tirer de cette analyse une conséquence logique stricte : une sauvegarde «
TimeMachine» démarrant uniquement par le dossier de
boot de type «
Recovery TM» =
com.apple.recovery.boot (sans que le clone d'
OS X qui lui coexiste en constituant la source d'une restauration éventuelle ne joue le moindre rôle dans ce démarrage) ; alors si une sauvegarde
Yosemite démarre, tandis qu'une sauvegarde
El Capitan ne démarre pas, cela ne peut découler que du contenu du dossier de
boot :
com.apple.recovery.boot recelé en chacune. Celui de la sauvegarde
Yosemite soit être "
sans erreur ", alors que celui de la sauvegarde
El Capitan doit être "
avec erreur".
Cette erreur ne peut pas affecter le fichier
BaseSystem.chunklist qui ne joue aucun rôle au démarrage. Elle ne peut pas affecter le fichier
boot.efi (car, dans mon expérience de démarrage sur la sauvegarde
El Capitan, j'ai obtenu le logo comme dans celle de
Yosemite (avant le signe d'interdiction de stationner
∅) : signe sans équivoque que l'
EFI a exécuté le
boot_loader trouvé.
[Point besoin de problématique de blessing comme Jean l'a creusée, car le logo prouve que l'EFI n'a aucun problème à trouver le boot_loader et à l'exécuter. Le blessing sert à renseigner sur le header d'un système de fichiers l'adresse à un boot_loader enfoui dans une arborescence ; par contre, un blessing n'est jamais nécessaire, lorsqu'un fichier booter .efi existe dans l'espace-racine d'un volume, car le scan du DiskManager déclenché par la touche "alt" inspecte automatiquement ce 1er degré d'arborescence des volumes montés, à défaut de blessing du header des systèmes de fichiers. Or un fichier de type booter existe au 1er degré du volume d'une sauvegarde : le tmbootpicker.efi (coexistant dans l'espace-racine du volume de sauvegarde avec le dossier Backups.backupdb). Je conjecture, comme son nom l'indique (boot_picker : sélecteur de boot) qu'il s'agit là d'un équivalent du fichier intercepteur de l'EFI qu'est le refind_x64.efi du gestionnaire de démarrage «rEFInd» sur l'EFI System Partition : un relai entre l'EFI (qui l'exécute) et le boot_loader spécifique d'un Système (qu'il exécute à son tour). Ce booter intercalaire tmbootpicker.efi recèle le path: /Backups.backupdb/.RecoverySets/0/com.apple.recovery.boot/boot.efi lui fixant a priori pour cible exécutoire le boot_loader : boot.efi régulier du dossier de boot : com.apple.recovery.boot. La trajectoire de boot est donc la suivante : EFI => [DiskManager] => tmbootpicker.efi [affiché en tant que : EFI_Boot] => boot.efi. Il s'ensuit que l'existence du logo signale bien que le boot.efi a été exécuté et a pris la main en vue de charger le cache-Système d'après lecture des 3 fichiers .plist. et que le plantage intervient après, lorsqu'il s'agit de charger le cache-Système, puisqu'on n'obtient pas la barre de chargement qui signale l'opération du kernel.]
L'erreur ne peut pas affecter le disque virtuel
BaseSystem.dmg, car ce disque est verrouillé en mode :
read_only => il est impossible de l'affecter d'erreurs d'écriture : on peut donc le considérer comme ayant une intégrité standard. Le cache-Système :
kernelcache n'est guère suspectable non plus a priori, étant le produit d'une commande de génération tout à fait basique comme dans le cas du dossier de
boot d'une «
Recovery HD».
Restent les 3 fichiers d'instruction
.plist lus par le
boot.efi avant chargement du cache de démarrage. J'ai examiné la paire de fichiers de « compatibilité » :
PlatformSupport.plist /
SystemVersion.plist pour chaque sauvegarde en la comparant à celle du dossier de
boot :
com.apple.recovery.boot de la «
Recovery HD» correspondant : identité parfaite. Si la «
Recovery HD» de chaque OS démarre sur son dossier de
boot, la «
Recovery TM» devrait démarrer sur un dossier de
boot identique à la virgule près.
♡
Solution théorique
Reste le fichier
com.apple.Boot.plist qui permet au
boot.efi de savoir l'adresse du cache-Système à charger et l'instruction d'accès au Système à déployer à communiquer au
kernel. Examen du
com.apple.Boot.plist de la sauvegarde
Yosemite :
Bloc de code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Kernel Cache</key>
<string>\Backups.backupdb\.RecoverySets\0\com.apple.recovery.boot\kernelcache</string>
<key>Kernel Flags</key>
<string>rp=file:///Backups.backupdb/.RecoverySets/0/com.apple.recovery.boot/BaseSystem.dmg</string>
</dict>
</plist>
=> rien à redire : logiquement consistant dans l'adressage du
kernelcache à charger et du
BaseSystem.dmg à monter par le
kernel pour charger le Système contenu dans son volume ; analogue au fichier
com.apple.Boot.plist de la «
Recovery HD 10.10» correspondante dans les 2 objets pointés, avec simplement une variante dans les départs d'adresse.
Examen du fichier
com.apple.Boot.plist de la sauvegarde
EL Capitan :
Bloc de code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Kernel Cache</key>
<string>\Backups.backupdb\.RecoverySets\0\com.apple.recovery.boot\kernelcache</string>
<key>Kernel Flags</key>
<string>rp=file:///Backups.backupdb/.RecoverySets/0/com.apple.recovery.boot/BaseSystem.dmg</string>
</dict>
</plist>
=> eh oui ! c'est
le même à la virgule près, mais justement, étant exactement
le même que celui de la sauvegarde
Yosemite, il est de ce fait
erroné. Comparaison avec le fichier de la «
Recovery HD 10.11» (qui démarre bien elle) :
Bloc de code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Kernel Cache</key>
<string>\com.apple.recovery.boot\prelinkedkernel</string>
<key>Kernel Flags</key>
<string>rp=file:///com.apple.recovery.boot/BaseSystem.dmg</string>
</dict>
</plist>
=> cherchez l'erreur... Il m'a fallu 1 seconde pour l'apercevoir. L'OS «
El Capitan» ne démarre plus via l'exécution par le
boot.efi d'un cache-Système
Vieille École :
kernelcache, mais d'un cache-Système
New Age :
prelinkedkernel. Il en va de même de la «
Recovery HD 10.11». Il
doit donc logiquement en aller de même de la «
Recovery TM 10.11» (la sauvegarde démarrable). Dans les dossiers de
boot :
com.apple.recovery.boot de ces 2 dernières, il y a bien en effet un
prelinkedkernel comme cache de démarrage, et non plus un
kernelcache.
Or, dans le fichier d'instruction de
boot :
com.apple.Boot.plist de la sauvegarde
TimeMachine 10.11, un bogue d'adressage continue de mentionner comme objet du chargement par le
boot.efi : un
kernelcache qui n'existe plus, ayant été remplacé par un
prelinkedkernel. Donc le
boot.efi prend bien ses fontions, lit l'adresse du cache-Système à charger et... ne rencontre aucun objet logique au nom attendu (
kernelcache) en fin de
path, puisqu'existe à la place un
prelinkedkernel.
♢
Solution pratique
Il suffit donc, dans la sauvegarde
TimeMachine d'
El Capitan, de naviguer sur le DDE à :
Backups.backupdb/.RecoverySets/0/com.apple.recovery.boot/com.apple.Boot.plist, de demander à ouvrir ce fichier par «
TextWrangler» (afin de respecter les droits
root sur le fichier) et d'éditer la ligne
6 :
Bloc de code:
<string>\Backups.backupdb\.RecoverySets\0\com.apple.recovery.boot\kernelcache</string>
en
Bloc de code:
<string>\Backups.backupdb\.RecoverySets\0\com.apple.recovery.boot\prelinkedkernel</string>
et de sauvegarder l'édition.
Happy Christmas Booting (si vous plantez le jour de Noël)
Je considère que
zeltron dans ce diagnostic :
J'ai essayé d'approfondir le problème.
Sur le disque TimeMachine dans le dossier Backups.Backupsdb il y a un dossier invisible recovery qui contient toute la structure de la partition recovery du disque.
Je suppose qu'il y a bien un problème dans un de ces fichiers ou dossiers. Il faudrait pouvoir y réinstaller la structure complète avec le fichier .plist (qui est dedans) correct par rapport à la structure remise en place.
Mais là, cela dépasse mes compétences... C'est peut être un beau dossier à soumettre à notre ami Macomaniac
.
avait entièrement cerné le point problématique et son issue - je n'ai fait qu'apporter à son
Idée l'
exécution de son détail.
⛳︎
Qu'arrivé à la version publique
10.11.2 (et à la développeur
10.11.3) - aucun déboguage de «
TimeMachine» n'ait été fait dans «
El Capitan» pour actualiser dans le fichier
com.apple.Boot.plist l'intitulé
prelinkedkernel du cache spécifique de cet OS (alors que ce fichier est à jour pour la «
Recovery HD» et pour l'OS), personne (parmi les ingénieurs de la ) ne s'étant soit soucié de tenter un démarrage sur une sauvegarde
TM, soit posé la question de savoir pourquoi le
boot_loader :
boot.efi plantait expérimentalement au chargement du cache de démarrage-Système : ça me rend bigrement hilare (version :
risus sardonicus) comme d'aviser qu'ici comme ailleurs les problèmes découlent du
nom des choses et non des
choses en elles-mêmes...