Ho appena recuperato un Macbook (OS X 10.5.2, Leopard) che non è riuscito ad avviarsi perché è rimasto eternamente bloccato su uno schermo grigio con un logo Apple e una ruota che gira.
Il colpevole era un file di configurazione danneggiato ( /etc/authorization
), e di seguito descriverò come ho trovato e risolto il problema.
Per prima cosa, ho controllato se l'hardware era a posto, riavviando e premendo D per eseguire la diagnostica dell'hardware. L'hardware era a posto, quindi ho continuato a cercare i messaggi di errore.
Dopo l'avvio in modalità Verbose ( Comando (⌘) + V ), ho visto che securityd si è bloccato e che un registro di crash è stato scritto su /Library/Logs/CrashReporter/securityd_2015-06-23-120634_localhost.crash
. Quindi, ancora una volta ho riavviato per ottenere una shell in modalità utente singolo ( Comando (⌘) + S ). Il log ha mostrato che il crash è stato causato da una chiamata a CFDictionaryContainsKey
(che ha attivato un errore EXC_BAD_ACCESS
). Questo ha alimentato il mio sospetto che il crash fosse causato da un brutto file di configurazione.
Alla fine ho trovato questo post del blog , che suggerisce di utilizzare fs_usage
per monitorare e registrare l'attività del file:
mount -uw /
fs_usage > /var/log/fs-usage.log &
exit
Dopo il riavvio, ho cercato in /var/log/fs-usage.log
e ho scoperto che securityd
ha avuto accesso a private/etc/authorization
prima di arrestarsi in modo anomalo. Poi ho visto il contenuto di /etc/authorization
, ed è stato effettivamente rotto irreparabilmente.
Per recuperare questo file, ho cercato la versione originale del file in l'origine della% pacchettosecurityd
(riferito al codice sorgente di OS X 10.5.2 ). Alla fine ho trovato etc/authorization.plist
, che aveva alcune somiglianze con il /etc/authorization
danneggiato.
Per completare il recupero, ho inserito il nuovo etc/authorization.plist
su una chiavetta USB, collegato al Macbook (ancora in modalità utente singolo) e montato l'unità segue :
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
Poi ho copiato il file alla sua destinazione, smontato la chiavetta USB, sincronizzato e riavviato correttamente:
cp /Volumes/usb/authorization.plist /etc/authorization
umount /Volumes/usb
sync
reboot