Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?

Ratgeber: Wann lohnt es sich, den Spotlight-Index neu aufzusetzen?

Apples systemweite Dateisuche Spotlight feierte in diesem Sommer ihren 20. Geburtstag. Über die Jahre hat sie viele Funktionen dazugewonnen; ihr Kern blieb jedoch die zuverlässige systemweite Suche. Anders als die Finder-Suche, mit der sich Objekte nach Dateiname aufspüren lassen, findet Spotlight auch Dokumente, deren Inhalt einem Suchbegriff entsprechen. Voraussetzung für erfolgreiche Suchen stellt der Spotlight-Index dar, den macOS für jedes angeschlossene Volume anlegt. Howard Oakley, ehemaliger Apple-Programmierer und jetzt akribischer macOS-Analytiker, gibt in einem Blog-Beitrag zu Spotlight Tipps, wann es vorteilhaft ist, diesen automatisch erzeugten Index zu erneuern – und wann es eher schadet als nützt.


Dafür erklärt er zunächst die Funktionsweise der Routinen, die für das Aktualisieren des Spotlight-Indexes zuständig sind: Legt ein Anwender eine neue Datei an oder ändert eine bestehende, werde dies von der FSEvents-Datenbank aufgezeichnet. Dies löse wiederum einen XPC-Aufruf aus: Sofern sich die (neue oder geänderte) Datei an einem von Spotlight beobachteten Bereich befindet, kümmere sich ein mdworker-Prozess darum, deren Inhalt dem Spotlight-Index hinzuzufügen. Dafür werde der Unique Type Identifier (UTI) überprüft und der dazugehörige mdimporter ausgewählt. Mit diesem „erkennt“ Spotlight gewissermaßen die Inhalte innerhalb der Datei, die für den Index relevant sind, und schreibt sie in die Datenbank. Dies sei nachvollziehbar in den macOS-Log-Dateien als ein Eintrag des Dienstes mds_stores; auch mdsync und mdwrite gehören zur Spotlight-Indizierung. Aktuelle macOS-Versionen durchsuchen im Nachgang noch eventuell vorhandene Bilder und erkennen darin Text sowie erkennbare Motive; dies übernehme der Dienst photoanalysisd.

Mehrere Ursachen für Spotlight-Fehler
Probleme mit dem Spotlight-Index können mehrere Gründe haben. Einige Beispiele: Eine Datei verwendet den falschen Dateityp (UTI), die Datei selbst ist fehlerhaft, oder ein mdimporter für den Dateityp hat einen Bug. In vielen Fällen führt das Neuaufsetzen des Spotlight-Indexes dazu, dass der Fehler reproduziert werde: Solange die fehlerhafte Datei oder der dysfunktionale mdimporter involviert sind, produziere der Indizierungsvorgang zuverlässig denselben Fehler. Ein erneutes Anlegen dauere meist Stunden, vielleicht Tage und helfe in diesen Fällen keinen Schritt weiter.

Fehlersuche mit Konsole und Mints
Oakley rät, zunächst Ursachenforschung zu betreiben. Sein kostenloses Analyseprogramm Mints beinhalte einen automatisierten Test für mdimporter. Um eine fehlerhafte Datei aufzuspüren, die mdimporter zum wiederholten Absturz bringe, müssen Anwender die Log-Dateien durchforsten. Das sei aktuell nicht einfach, da Privatsphärenschutz die Anzeige der verantwortlichen Datei unterbinde (Tipps zu deren Umgehung finden sich hier). Entferne man eine fehlerhafte Datei vom Mac-Volume, sollte mdworker wieder funktionieren.

Oakley's Mints integriert einen automatisierten Test für fehlerhafte System-mdimporter.

Anleitung zum Reindizieren
Sollte hinreichend klar sein, dass der Spotlight-Index selbst den Fehler aufweise, empfiehlt Oakley als Vorgehensweise die Spotlight-Kategorie in „Einstellungen“. Über den Button „Privatsphäre der Suchfunktion“ unten rechts kommt man in die Liste auszuschließender Orte. Dieser fügt man über das Plus-Symbol alle Volumes hinzu, deren Index man neu anlegen möchte. Anschließend klicke man auf „Fertig“, warte eine Minute, öffne die Liste erneut und entferne die Volume-Einträge. Wer sich mit der Kommandozeile auskennt, erreiche dasselbe mit dem Befehl „mdutil -E ", gefolgt vom Volume-Pfad. In der Aktivitätsanzeige könne man nachvollziehen, wie lange der Mac mit der Neuanlage beschäftigt sei: Die Dienste mds_stores, mdworker (eventuell in mehrfacher Ausführung) und mds belegen über längere Zeit obere Plätze der „% CPU“-Rangliste.

In der Einstellungen-App unter Spotlight findet sich der Button „Datenschutz der Suchfunktion“. Über ihn fügt man Volumes hinzu, um sie danach wieder zu entfernen, was eine Neuanlage der Suchdatenbank erzwingt.

Vorschnelles Auswerfen eine Ursache?
In den Kommentaren wird eine Vermutung für eine recht häufige Ursache von defekten Spotlight-Indices geäußert: Vorschnelles Abziehen eines externen Laufwerks, ohne dass es ordnungsgemäß über den Finder ausgeworfen wurde. Selbst ein anschließendes regelkonformes Ab- und Wiederanmelden des Laufwerks sorge nicht dafür, dass macOS die korrekte Indizierung wiederaufnehme. Nur eine Reindizierung dieses Laufwerks helfe, um Spotlight davon abzuhalten, Objekte auf diesem Gerät zu „finden“, obwohl sie längst gelöscht seien.

Kommentare

andreas_g
andreas_g19.11.24 18:50
Das mit dem Neuanlegen des Spotlight-Index funktioniert seit dem Update auf Sequoia bei mir regelmäßig von selbst. Nach dem Absturz von mds_stores wird der Index neu angelegt.

Process:               mds_stores [61554]
Path:                  /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Support/mds_stores
Identifier:            mds_stores
Version:               ???
Code Type:             ARM-64 (Native)
Parent Process:        launchd [1]
User ID:               0

Date/Time:             2024-11-15 21:14:16.7910 +0100
OS Version:            macOS 15.1 (24B83)
Report Version:        12
Anonymous UUID:        33C3A953-33C7-A3D5-9148-51AF0D043FC5

Sleep/Wake UUID:       D09A782B-D587-424D-AE45-96DF9439A0D5

Time Awake Since Boot: 26000 seconds
Time Since Wake:       464 seconds

System Integrity Protection: enabled

Crashed Thread:        4  Dispatch queue: com.apple.root.user-initiated-qos

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x000040000000004d
Exception Codes:       0x0000000000000001, 0x000040000000004d

Termination Reason:    Namespace SIGNAL, Code 11 Segmentation fault: 11
Terminating Process:   exc handler [61554]

VM Region Info: 0x40000000004d is not in any region.  Bytes after previous region: 69887707840590  
      REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      commpage (reserved)        1000000000-7000000000   [384.0G] ---/--- SM=NUL  reserved VM address space (unallocated)
--->  
      UNUSED SPACE AT END

...

Thread 4 Crashed::  Dispatch queue: com.apple.root.user-initiated-qos
0   SpotlightIndex                           0x19edae424 QueryFunctionCallbackContext_METADATA::postCheck(db_obj*, query_piece*, void const* const*) + 92
1   SpotlightIndex                           0x19eb3dcc8 db_eval_obj_with_options + 1104
2   SpotlightIndex                           0x19edb8310 invocation function for block in processItems(datastore_info*, unsigned long, unsigned long, si_localized_value_cache*, unsigned long*, bool, void* (SI_OBJECT_EVENT, si_event_data_t, unsigned long, void*) block_pointer, void*, unsigned __int128, unsigned __int128, unsigned short*, unsigned long, unsigned char*, bool, unsigned int, unsigned long, bool, dispatch_queue_s*, void*, unsigned int, __MDPlistBytes*, ranking_mode_s, ci_rankingbits_s*, ci_tc_distances_t*, ci_vector_distances_t*, PartialQueryResults*, SISearchCtx_METADATA*&, int, bool&, ReadData_s*, $_0 volatile*, ci_combobits_wrapped_s*, dispatch_semaphore_s*) + 1500
3   libdispatch.dylib                        0x183d54698 _dispatch_client_callout2 + 20
4   libdispatch.dylib                        0x183d68d40 _dispatch_apply_serial + 164
5   libdispatch.dylib                        0x183d54658 _dispatch_client_callout + 20
6   libdispatch.dylib                        0x183d59a1c _dispatch_sync_function_invoke + 52
7   libdispatch.dylib                        0x183d68280 _dispatch_apply_with_attr_f + 1404
8   libdispatch.dylib                        0x183d683cc dispatch_apply + 96
9   SpotlightIndex                           0x19edb7bc8 processItems(datastore_info*, unsigned long, unsigned long, si_localized_value_cache*, unsigned long*, bool, void* (SI_OBJECT_EVENT, si_event_data_t, unsigned long, void*) block_pointer, void*, unsigned __int128, unsigned __int128, unsigned short*, unsigned long, unsigned char*, bool, unsigned int, unsigned long, bool, dispatch_queue_s*, void*, unsigned int, __MDPlistBytes*, ranking_mode_s, ci_rankingbits_s*, ci_tc_distances_t*, ci_vector_distances_t*, PartialQueryResults*, SISearchCtx_METADATA*&, int, bool&, ReadData_s*, $_0 volatile*, ci_combobits_wrapped_s*, dispatch_semaphore_s*) + 516
10  SpotlightIndex                           0x19edb706c invocation function for block in readSDBForOids(SISearchCtx_METADATA*, long long*, unsigned short*, ci_rankingbits_s*, ci_tc_distances_t*, ci_vector_distances_t*, unsigned long, unsigned char*, PartialQueryResults*, __MDPlistBytes*, bool, bool) + 2360
11  libdispatch.dylib                        0x183d54698 _dispatch_client_callout2 + 20
12  libdispatch.dylib                        0x183d68d40 _dispatch_apply_serial + 164
13  libdispatch.dylib                        0x183d54658 _dispatch_client_callout + 20
14  libdispatch.dylib                        0x183d59a1c _dispatch_sync_function_invoke + 52
15  libdispatch.dylib                        0x183d68280 _dispatch_apply_with_attr_f + 1404
16  libdispatch.dylib                        0x183d683cc dispatch_apply + 96
17  SpotlightIndex                           0x19edb439c readSDBForOids(SISearchCtx_METADATA*, long long*, unsigned short*, ci_rankingbits_s*, ci_tc_distances_t*, ci_vector_distances_t*, unsigned long, unsigned char*, PartialQueryResults*, __MDPlistBytes*, bool, bool) + 12372
18  SpotlightIndex                           0x19eaf38fc _performSearch(SISearchCtx_METADATA*, PartialQueryResults*) + 2632
19  SpotlightIndex                           0x19eaf1df4 inner_performSearch(SISearchCtx_METADATA*, PartialQueryResults*) + 1344
20  SpotlightIndex                           0x19eaf15a4 performSearch_METADATA(SISearchCtx_METADATA*, PartialQueryResults*) + 592
21  SpotlightIndex                           0x19eaf0b54 executeSearchContextCracked_2(SISearchCtx*, search_ctx_s*) + 1164
22  SpotlightIndex                           0x19ead6594 executeSearchCtx_Start(search_ctx_s*, unsigned char) + 368
23  SpotlightIndex                           0x19eb79698 userinteractive_query_runLoop + 148
24  SpotlightIndex                           0x19ed4e028 work_fun_inner + 972
25  SpotlightIndex                           0x19eac4848 work_fun + 68
26  libdispatch.dylib                        0x183d54658 _dispatch_client_callout + 20
27  libdispatch.dylib                        0x183d57b08 _dispatch_continuation_pop + 596
28  libdispatch.dylib                        0x183d57138 _dispatch_async_redirect_invoke + 580
29  libdispatch.dylib                        0x183d66314 _dispatch_root_queue_drain + 392
30  libdispatch.dylib                        0x183d66b20 _dispatch_worker_thread2 + 156
31  libsystem_pthread.dylib                  0x183f0339c _pthread_wqthread + 228
32  libsystem_pthread.dylib                  0x183f020f0 start_wqthread + 8

Hat sonst noch jemand das Problem?
-1

Kommentieren

Sie müssen sich einloggen, um die News kommentieren zu können.