Perché mdworker segfault durante la scansione di file di proprietà di root?

1

Durante l'analisi di un disco con spazio libero sempre più ridotto e una CPU ancorata a > 100%, alla fine ho determinato che il problema era mdworker ripetutamente segmentato, mantenendo syslogd e CrashReporter molto occupati.

Ho provato a ricostruire gli indici di Spotlight nei soliti modi: in primo luogo, tramite la scheda Privacy in Preferenze di Sistema - > Spotlight, quindi tramite mdworker -i off / ; mdworker -E -i on / , e lo stesso di nuovo ma con rm -rf /.Spotlight-V100 intermedio e riavvio per buona misura; nulla sembrava risolvere il problema.

Usando la scheda Privacy per escludere praticamente tutto tranne /Applications/ , quindi aggiungere / rimuovere questa cartella per forzare una nuova scansione, e sono stato in grado di determinare che alcuni file sono stati indicizzati correttamente (e visualizzati in Spotlight risultati) ma alcuni non lo sono; un po 'di più in giro con opensnoop -n mdworker rivela che quando mdworker viene avviato con UID 501, per eseguire la scansione dei file dell'applicazione di mia proprietà funziona correttamente (e lo stesso per alcuni altri UID che possiedono file in /Applications/ ), ma quando è avviato con UID 89 ( _spotlight , in base a dscl . -list /Users UniqueID ) - presumibilmente per eseguire la scansione di file di proprietà di root - it segfaults.

Ecco una voce di esempio da Console:

2015-07-16 13:53:25 com.apple.launchd[1]    (0x100101670.mach_init.mdworker[13276]) Job appears to have crashed: Segmentation fault
2015-07-16 13:53:25 com.apple.ReportCrash.Root[13274]   2015-07-16 13:53:25.326 ReportCrash[13274:341b] Saved crash report for mdworker[13276] version ??? (???) to /Library/Logs/DiagnosticReports/mdworker_2015-07-16-135325-1_localhost.crash

Ed ecco un estratto dal rapporto sugli arresti anomali (sono tutti praticamente identici):

Process:         mdworker [13276]
Path:            /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Support/mdworker
Identifier:      mdworker
Version:         ??? (???)
Code Type:       X86-64 (Native)
Parent Process:  launchd [1]

Date/Time:       2015-07-16 13:53:25.085 +0100
OS Version:      Mac OS X 10.6.8 (10K549)
Report Version:  6

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x000000010f5d1062
Crashed Thread:  3

[...]

Thread 3 Crashed:
0   ...ple.CoreServices.CarbonCore  0x00007fff867e7f0b CSStoreGetUnit + 84
1   com.apple.LaunchServices        0x00007fff821721ab _LSContainerCheckState + 65
2   com.apple.LaunchServices        0x00007fff82188fea _LSCopyLibraryItemURLs + 419
3   mdworker                        0x0000000100004305 0x100000000 + 17157
4   mdworker                        0x0000000100004c22 0x100000000 + 19490
5   mdworker                        0x00000001000050f3 0x100000000 + 20723
6   mdworker                        0x0000000100009aa2 0x100000000 + 39586
7   libSystem.B.dylib               0x00007fff80b94fd6 _pthread_start + 331
8   libSystem.B.dylib               0x00007fff80b94e89 thread_start + 13

[...]

Sono ragionevolmente sicuro che ciò non sia causato dai contenuti dei file che tenta di scansionare, perché dovrebbe essere scansionato in /Applications/ , e opensnoop non lo riporta toccando alcun file lì (infatti, l'elenco dei file aperti per ogni istanza di UID in crash è identico, AFAICT).

È possibile che questo problema sia legato a problemi che ho avuto con Time Machine, che è iniziato all'incirca nello stesso periodo: backupd anche segfault in modo imprevisto - non istantaneamente all'avvio, ma nel processo di montaggio del mio backup NAS volume. Ecco un estratto da un rapporto di crash di backup:

Thread 5 Crashed:
0   ...ple.CoreServices.CarbonCore  0x00007fff867e7f0b CSStoreGetUnit + 84
1   com.apple.LaunchServices        0x00007fff8217f3fb _LSBundleFindWithNode + 544
2   com.apple.LaunchServices        0x00007fff82177bd1 _LSFindOrRegisterBundleNode + 219
3   com.apple.LaunchServices        0x00007fff82177a85 _LSCopyItemAttributeForRefInfoWithOptions + 201
4   com.apple.LaunchServices        0x00007fff821799cf prepareAttributeValueForKey(__CFURL const*, __FileCache*, __CFString const*, void const**, __CFError**) + 79
5   com.apple.LaunchServices        0x00007fff82179934 prepareDistinctLocalizedNameValue(__CFURL const*, __FileCache*, __CFError**) + 36
6   com.apple.LaunchServices        0x00007fff8217990b prepareLocalizedNameValue(__CFURL const*, __FileCache*, __CFError**) + 9
7   com.apple.LaunchServices        0x00007fff82179712 LSPropertyProviderPrepareValues(__CFURL const*, __FileCache*, __CFString const* const*, void const**, long, void const*, __CFError**) + 51
8   ...ple.CoreServices.CarbonCore  0x00007fff867f8dd4 prepareValuesForBitmap(__CFURL const*, __FileCache*, _FilePropertyBitmap*, __CFError**) + 264
9   ...ple.CoreServices.CarbonCore  0x00007fff867f78bd _FSURLCopyResourcePropertiesForKeys + 980
10  com.apple.CoreFoundation        0x00007fff897dc562 CFURLCopyResourcePropertiesForKeys + 98
11  com.apple.DesktopServices       0x00007fff833737af TCFURLInfo::FetchProperties(bool) + 91
12  com.apple.DesktopServices       0x00007fff8337358f TCFURLInfo::Initialize(__CFURL const*, bool, bool) + 183
13  com.apple.DesktopServices       0x00007fff833d1acd TCFURLInfo::Initialize(char const*, unsigned int) + 89
14  com.apple.DesktopServices       0x00007fff833d369c TCFURLInfo::CreateDirectory(TUString const&, TUniqueNamer*, __FSFileSecurity*, bool, TCountedPtr<TCFURLInfo>&) const + 464
15  com.apple.DesktopServices       0x00007fff833dc95a TCopyWriter::CreateNewDestinationItem() + 178
16  com.apple.DesktopServices       0x00007fff833dd136 TCopyWriter::CreateItem() + 1126
17  com.apple.DesktopServices       0x00007fff833dd41e TCopyWriter::Write() + 146
18  com.apple.DesktopServices       0x00007fff833dd6a6 TCopyWriter::WriteTaskProc(void*) + 72
19  ...ple.CoreServices.CarbonCore  0x00007fff867e40d1 PrivateMPEntryPoint + 63
20  libSystem.B.dylib               0x00007fff80b94fd6 _pthread_start + 331
21  libSystem.B.dylib               0x00007fff80b94e89 thread_start + 13

Ho usato Utility Disco per (live) per verificare il volume e riparare i permessi. Ho provato a reinstallare l'aggiornamento combo 10.6.8 1.1 e l'aggiornamento supplementare.

Quali potrebbero essere la causa di questi arresti anomali e come potrei risolverlo?

    
posta cpcallen 16.07.2015 - 16:09
fonte

1 risposta

4

Il problema è stato causato da una cache dei servizi di avvio corrotti e l'ho risolto eseguendo il seguente comando:

sudo find /System/Library/Frameworks -type f -name lsregister -exec {} -kill -seed -r \;

L'indizio era che il segfault si stava verificando a CSStoreGetUnit + 84 in entrambi i processi; una rapida ricerca su Google porta a un post di blog che suggerisce il danneggiamento della cache potrebbe essere il problema. Piuttosto che manualmente rm dei file della cache, ho seguito le istruzioni che ho trovato su The X Lab , che equivaleva a una spiegazione dettagliata di come aprire il terminale per eseguire il comando sopracitato, notando:

  • C'è un errore di battitura relativo a smartquotes in quella pagina (riportato).
  • Poiché mdworker ha funzionato correttamente come UID 501 (e molti altri), ho indovinato che avrei dovuto reimpostare la cache dei servizi di lancio di root ; il prefisso sudo ha avuto l'effetto desiderato.

Note aggiuntive:

  • Su 10.8.6 (almeno) è possibile visualizzare tutti i file della cache di Launch Service con il seguente comando:

    sudo find /var/folders /Library/Caches/ -name '*LaunchServices*' -print0 |sudo xargs -0 ls -l 
    
  • Per alcuni motivi sconosciuti, esiste un file di cache modificato di recente per UID 501 in /Library/Caches/ e /var/folders/ ; altri UID hanno solo uno sotto /var/folders/ . Questo non sembra causare problemi.

  • Questo ha risolto il problema con backupd .

risposta data 16.07.2015 - 17:19
fonte

Leggi altre domande sui tag