Warum segfault mdworker beim Scannen von Dateien, die Root gehören?

Bei der Untersuchung einer Festplatte mit immer weniger freiem Speicherplatz und einer CPU, die auf >100 % festgelegt war, stellte ich schließlich fest, dass das Problem mdworkerwiederholt Segfaulting verursachte, wodurch syslogd und CrashReporter sehr beschäftigt waren.

Ich habe versucht, die Indizes von Spotlight auf die übliche Weise neu zu erstellen: zuerst über die Registerkarte „Datenschutz“ in den Systemeinstellungen -> Spotlight, dann über , mdworker -i off / ; mdworker -E -i on /und das Gleiche noch einmal, aber mit einem dazwischenliegenden rm -rf /.Spotlight-V100und einem Neustart für ein gutes Maß; nichts schien das Problem zu lösen.

Die Verwendung der Registerkarte Datenschutz, um so ziemlich alles außer auszuschließen /Applications/, und dann das Hinzufügen/Entfernen dieses Ordners, um einen erneuten Scan zu erzwingen, und ich konnte feststellen, dass einige Dateien ordnungsgemäß indiziert werden (und in den Spotlight-Ergebnissen angezeigt werden), andere jedoch nicht ; Ein bisschen mehr Herumstochern mit opensnoop -n mdworkerenthüllt, dass, wenn mdworkermit UID 501 gestartet wird, das Scannen von Anwendungsdateien, die mir gehören, gut funktioniert (und dasselbe für ein paar andere UIDs, die Dateien in besitzen /Applications/), aber wenn es mit UID 89 gestartet wird ( _spotlight, entsprechend to dscl . -list /Users UniqueID) - vermutlich um Dateien zu scannen, die root gehören - es segfaults.

Hier ist ein Beispieleintrag aus der Konsole:

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

Und hier ist ein Auszug aus dem Absturzbericht (sie sind alle ziemlich identisch):

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

[...]

Ich bin ziemlich sicher, dass dies nicht durch den Inhalt der Dateien verursacht wird, die versucht werden zu scannen, da sollte in scannen /Applications/und opensnoopmeldet nicht, dass dort Dateien berührt werden (tatsächlich ist die Liste der Dateien, die für jede abstürzende UID 89 Instanz ist identisch, AFAICT).

Es ist möglich, dass dieses Problem mit Problemen zusammenhängt, die ich mit Time Machine hatte, die ungefähr zur gleichen Zeit gestartet wurde: backupdauch unerwartete Segfaults - nicht sofort beim Start, sondern beim Mounten meines NAS-Backup-Volumes. Hier ist ein Auszug aus einem gesicherten Absturzbericht:

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

Ich habe das Festplatten-Dienstprogramm verwendet, um das Volume (live) zu überprüfen und Berechtigungen zu reparieren. Ich habe versucht, das 10.6.8 Combo Update 1.1 und das Supplemental Update neu zu installieren.

Was könnte diese Abstürze verursachen und wie kann ich sie beheben?

Angenommen, Sie haben einige Apps von Drittanbietern installiert, hier ist eine Idee. Versuchen Sie „Split Half“ auf /Applications – dh verschieben Sie die Hälfte der Apps vorübergehend an eine andere Stelle, erstellen Sie den Index neu und sehen Sie, ob es fehlschlägt ... wenn es fehlschlägt, liegt das Problem bei den verbleibenden Apps: Wiederholen Sie den Vorgang, bis Sie es eingegrenzt haben down (hoffentlich) eine bestimmte App. (In Eile geschrieben: Entschuldigung, wenn das unklar ist ...)
@Ashley: Das würde Sinn machen, wenn es jemals eine der Dateien im /Applications/Besitz von öffnen rootwürde, aber es kommt nicht einmal so weit.

Antworten (1)

Das Problem wurde durch einen beschädigten Launch Services-Cache verursacht, und ich habe es gelöst, indem ich den folgenden Befehl ausgeführt habe:

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

CSStoreGetUnit + 84Der Hinweis war, dass der Segfault in beiden Prozessen auftrat ; Eine schnelle Google-Suche führt zu einem Blog-Eintrag , der darauf hindeutet, dass eine Cache-Beschädigung das Problem sein könnte. Anstatt rmdie Cache-Dateien manuell zu speichern, folgte ich den Anweisungen, die ich bei The X Lab gefunden hatte , was einer detaillierten Erklärung entsprach, wie man das Terminal öffnet, um den oben genannten Befehl auszuführen, wobei Folgendes zu beachten ist:

  • Es gibt einen Smartquotes-bezogenen Tippfehler auf dieser Seite (gemeldet).
  • Da es mdworkerals UID 501 (und einige andere) gut lief, dachte ich, ich müsste rootden Startdienst-Cache von zurücksetzen; Präfix sudohatte den gewünschten Effekt.

Zusätzliche Bemerkungen:

  • Unter 10.8.6 (mindestens) können Sie alle Cache-Dateien des Launch Service mit dem folgenden Befehl anzeigen:

    sudo find /var/folders /Library/Caches/ -name '*LaunchServices*' -print0 |sudo xargs -0 ls -l 
    
  • Aus unbekannten Gründen existiert eine kürzlich geänderte Cache-Datei für UID 501 sowohl in /Library/Caches/als auch in /var/folders/; andere UIDs haben nur eine unter /var/folders/. Dies scheint keine Probleme zu bereiten.

  • Dies hat das Problem mit gelöst backupd.