He recuperado un Macbook (OS X 10.5.2, Leopard), el cual no pudo iniciarse debido consiguió eternamente pegado en una pantalla gris con un logotipo de Apple y una rueda giratoria.
El culpable fue dañado un archivo de configuración (/etc/authorization
), y a continuación voy a describir cómo he encontrado y resuelto el problema.
En primer lugar, he comprobado si el hardware estaba bien, al reiniciar y pulsar D para ejecutar los diagnósticos de hardware. El hardware estaba bien, así que he seguido para buscar los mensajes de error.
Después de arrancar en modo Verbose (Comando (⌘) + V), vi que securityd se estrelló, y que un accidente de registro fue escrito a /Library/Logs/CrashReporter/securityd_2015-06-23-120634_localhost.crash
. Así que una vez más me reinicia para obtener una shell en modo de usuario Único (Comando (⌘) + S). El registro mostró que el accidente fue causado por una llamada a CFDictionaryContainsKey
(lo que provocó un EXC_BAD_ACCESS
de error). Esto alimenta mi sospecha de que el accidente fue causado por una configuración incorrecta de archivo.
Finalmente me encontré con este blog, lo que sugiere la utilización de fs_usage
para monitorear y registrar la actividad de los archivos:
mount -uw /
fs_usage > /var/log/fs-usage.log &
exit
Después de reiniciar, me miré en /var/log/fs-usage.log
y se encontró que securityd
acceso private/etc/authorization
antes de estrellarse. Luego he visto el contenido de /etc/authorization
, y de hecho fue roto más allá de la reparación.
Para recuperar este archivo, yo busqué la versión original del archivo en el origen de la securityd
paquete (que se hace referencia en OS X 10.5.2 del código fuente). Eventualmente me di etc/authorization.plist
, que tenía algunas similitudes con el dañado /etc/authorization
.
Para completar la recuperación, puse el nuevo etc/authorization.plist
en una memoria USB, conectado al Macbook (todavía en modo de usuario único) y se monta la unidad de la siguiente manera:
mount -uw /
launchctl load /System/Library/LaunchDaemons/com.apple.kextd.plist
# Wait about 20 seconds
mkdir /Volumes/usb
mount -t msdos -v -o ro /dev/disk1s1 /Volumes/usb
Luego he copiado el archivo a su destino, sin montar la memoria USB, sincronizado y se reinicia correctamente:
cp /Volumes/usb/authorization.plist /etc/authorization
umount /Volumes/usb
sync
reboot