Как устроен поиск и почему он «слепнет»
Spotlight не просматривает диск при каждом запросе. Фоновые службы заранее собирают сведения об именах, содержимом и свойствах файлов и складывают их в индекс — специальную базу на каждом томе. Когда вы нажимаете Command+Пробел и вводите слово, система обращается к этой базе, поэтому ответ приходит быстро.
Отсюда и причины сбоев. Файл может не находиться, если он ещё не успел попасть в индекс, если папка добавлена в список исключений, если том вообще не индексируется или если сама база повреждена после сбоя питания либо крупного обновления системы. Реже дело в настройке категорий результатов: нужный тип данных просто отключён в списке.
Перед радикальными мерами полезно уточнить симптом:
- не находится всё подряд или только свежие файлы;
- проблема на встроенном диске или на внешнем;
- поиск пустой в Spotlight, но работает в окне Finder;
- сразу после обновления macOS или после переноса данных на новый компьютер.
Если сразу после обновления или миграции поиск работает частично, это может быть просто идущая переиндексация: на большом диске она занимает заметное время и нагружает процессор.
Сначала проверьте настройки и исключения
Самое быстрое — посмотреть, что система уже знает о ваших запретах. Откройте настройки системы, раздел, связанный со Spotlight (в зависимости от версии macOS он может называться «Siri и Spotlight» или «Spotlight»). В нём два интересных места: список категорий результатов и кнопка с параметрами конфиденциальности поиска (в старых версиях — вкладка «Конфиденциальность» в разделе Spotlight окна «Системные настройки»).
В списке конфиденциальности перечислены папки и диски, которые Spotlight не должен индексировать. Если там случайно оказалась папка с документами или целый внешний накопитель, поиск по ним работать не будет. Уберите запись кнопкой со знаком минус.
Приём, о котором нередко пишут при сбоях: добавить проблемную папку или диск в этот список, а затем сразу удалить. Обычно это заставляет систему пересобрать индекс для этого места. Он мягче ручных команд, потому что не затрагивает остальные тома, но помогает не в каждом случае.
Заодно просмотрите категории: если отключены «Документы» или «Программы», такие результаты не появятся, даже когда индекс в порядке. Изменения обычно применяются сразу.
Статус индекса через mdutil и mdfind
Если настройки в порядке, переходим к терминалу. Команда mdutil управляет индексированием, и для просмотра её обычно можно запускать без повышенных прав.
| Команда | Что делает |
|---|---|
| mdutil -s / | показывает, включено ли индексирование для корневого тома |
| mdutil -a -s | показывает статус для всех подключённых томов |
| mdfind -name имя | ищет по имени файла через тот же индекс |
| mdfind -onlyin ~/Documents слово | ограничивает поиск указанной папкой |
Типичный ответ выглядит как «Indexing enabled» — индексирование включено. Если вместо него «Indexing disabled», то для этого тома служба выключена, и найти файлы по нему поиск не сможет. Включение выполняется командой mdutil -i on с указанием тома и требует sudo.
Сравнение mdfind с Spotlight помогает локализовать проблему: если терминал находит файл, а окно поиска нет, вероятнее проблема в настройках категорий или в интерфейсе. Если не находят оба, виноват сам индекс.
Пересоздание индекса: порядок и последствия
Когда исключения и статус ничего не показали, индекс можно построить заново. Для корневого тома команда выглядит так: sudo mdutil -E /. Ключ -E стирает существующий индекс и запускает создание нового; команда требует пароль администратора, поэтому убедитесь, что указан нужный том.
Что произойдёт дальше:
- Spotlight на время станет почти бесполезным: результаты появляются по мере переиндексации.
- Фоновые процессы с именами, начинающимися на md (например mds и mdworker), будут заметно нагружать процессор и диск. Посмотреть это можно в мониторинге системы.
- Ноутбук лучше держать на питании: индексация расходует заряд.
- Завершение зависит от размера диска и количества файлов, поэтому закладывайте время, а не ждите результата сразу.
Для внешнего тома укажите его путь, например sudo mdutil -E /Volumes/ИмяДиска. Если том отформатирован в файловой системе без нужной поддержки или смонтирован только для чтения, индексация может не работать вовсе. Сведения о файловых системах внешних накопителей есть в отдельном материале про NTFS, exFAT и FAT32.
Что делать, если ничего не помогло
Бывает, что и пересоздание индекса не приносит результата. Не торопитесь переустанавливать систему — сначала исключите внешние факторы.
- Запустите проверку тома в дисковой утилите: ошибки файловой системы мешают индексированию.
- Проверьте, достаточно ли свободного места: при нехватке пространства фоновые задачи работают нестабильно.
- Загрузитесь в безопасном режиме и затем перезагрузитесь обычным способом: при этом система, по сведениям Apple, выполняет проверки и очищает часть кэшей. Способ входа в безопасный режим зависит от типа процессора, уточните его в справке для вашей модели.
- Посмотрите, не мешает ли стороннее приложение: средства защиты и утилиты очистки иногда меняют права на папки с индексом.
- Создайте нового пользователя и проверьте поиск там: если у него всё работает, проблема в настройках учётной записи, а не в системе.
Если ни один шаг не помог, имеет смысл обратиться в службу поддержки производителя и приложить сведения о версии системы и результате mdutil. Перед глубоким вмешательством убедитесь, что у вас есть актуальная копия данных.
Поиск в Finder и поиск через Spotlight: в чём разница
Многие считают, что окно поиска Finder и строка Spotlight — одно и то же, но у них разные привычки. Оба используют тот же индекс, однако Finder позволяет задать область поиска: этот Mac, текущая папка или выбранный диск. Поэтому при подозрении на проблему с индексом полезно сравнить результаты в обоих местах.
| Что сравнить | Как трактовать |
|---|---|
| Нашёл Finder в текущей папке, Spotlight нет | возможно, отключена категория результатов |
| Не нашли оба, а mdfind находит | проблема в интерфейсе или настройках отображения |
| Не нашли ни один способ, mdfind молчит | вероятно, индекс неполный, и можно переиндексировать |
| Находит по имени, но не по содержимому | содержимое этого формата не индексируется |
Последняя строка объясняет один из возможных случаев: имя файла в индексе есть, а текст внутри нестандартного формата не читается индексатором. Это ограничение формата, а не поломка, и переиндексация тут не поможет. Для таких файлов пользуйтесь поиском по имени или инструментом самой программы, в которой они создавались.