Проблема извлечения дисков на Mac, которую Apple игнорирует годами

Пользователи Mac жалуются на расплывчатые ошибки извлечения ещё со времён PowerPC. Apple так это и не исправила. Вот история этой раздражающей проблемы.

Попробуйте извлечь внешний диск на Mac, и иногда вы получите такое сообщение: «Диск не извлечён, так как его, возможно, используют одна или несколько программ».

Одна или несколько программ. Возможно, используют. Не «используют». Не какие именно программы. Просто расплывчатое обвинение, что что-то, где-то, может держать файл открытым.

Это сообщение об ошибке существует практически в неизменном виде уже более пятнадцати лет. Пользователи Mac просят исправить это на форумах поддержки Apple как минимум со времён Snow Leopard. Жалобы продолжаются в каждой версии macOS: Mountain Lion, Mavericks, Catalina, Monterey, Ventura, Sonoma, Sequoia. Сообщение никогда не меняется. Apple никогда его не исправляет.

Проблема очевидна

Когда вы не можете извлечь диск, вам нужны две вещи: какой процесс его блокирует и как этот процесс остановить. macOS не даёт ни того, ни другого.

Операционная система точно знает, какой процесс держит файлы открытыми на диске. Она обязана это знать, потому что именно так она определяет, разрешать ли извлечение. Но вместо того чтобы поделиться этой информацией, macOS даёт вам эмодзи пожимания плечами в текстовом виде.

Сравните это с командой Терминала lsof, которая перечисляет каждый процесс с открытыми файлами по заданному пути. Информация существует. Она доступна. Apple просто решила не помещать её в диалог ошибки.

Что пользователи делают на самом деле

Столкнувшись с этим бесполезным сообщением об ошибке, пользователи Mac выработали целый фольклор обходных путей, передаваемых через посты на форумах и комментарии в блогах.

Оптимисты ждут и пробуют снова, надеясь, что какой бы загадочный процесс это ни был, он завершится сам. Иногда это срабатывает. Часто нет.

Технически подкованные открывают Терминал и запускают lsof /Volumes/DriveName, затем разбирают вывод, чтобы найти виновников. Это требует знания, что команда существует, понимания, как читать её вывод, и готовности завершать процессы.

Нетерпеливые извлекают принудительно и надеются на лучшее. Иногда всё в порядке. Иногда повреждаются данные. Не зная, что на самом деле использует диск, оценить риск невозможно.

Раздражённые просто перезагружают Mac. Это точно работает, но абсурдно, что для отключения диска требуется перезагружать компьютер.

Почему Apple это не исправила?

Наверняка знает только Apple, но вот несколько теорий.

Диалог ошибки пришлось бы менять, а Apple исторически избегает добавления сложности в сообщения для пользователей. Но «Safari использует этот диск» не сложнее, чем «одна или несколько программ могут его использовать». Это полезнее.

Список блокирующих процессов в граничных случаях мог бы быть длинным или запутанным. Верно, но показать главного виновника было бы бесконечно лучше, чем не показывать ничего. А для граничных случаев кнопка «Подробнее» — стандартная практика.

Большинство пользователей сталкивается с этой проблемой недостаточно часто, чтобы громко жаловаться. Возможно, но Сообщества поддержки Apple и форумы MacRumors полны тем, уходящих на годы назад. Проблема хорошо задокументирована.

Настоящий ответ, вероятно, — приоритеты. У Apple ограниченные инженерные ресурсы, и эта проблема, хоть и раздражающая, не мешает людям пользоваться своими Mac. Она просто заставляет их бормотать проклятия в экран раз в пару недель.

Проблема усугубляется

По мере того как внешние накопители становятся всё более распространёнными (быстрые USB-C SSD, портативные диски для видеомонтажа, диски для резервных копий Time Machine), пользователи сталкиваются с этой ошибкой чаще.

macOS также запускает всё больше фоновых процессов, которые обращаются к внешним дискам. Индексирование Spotlight, мониторинг Time Machine, синхронизация iCloud, различные процессы-демоны. Число потенциальных блокировщиков выросло, но сообщение об ошибке осталось таким же расплывчатым.

Пользователи, переходящие со старых Mac, сообщают, что проблема чаще проявляется на машинах с Apple Silicon. Программное это изменение или просто восприятие — неясно, но жалобы усилились с момента перехода на M1.

Сторонние решения существуют

Сам факт того, что сторонние разработчики построили целые приложения вокруг этой проблемы, о чём-то говорит.

What’s Keeping Me была популярной утилитой, которая показывала, какие процессы блокируют диск. Её забросили много лет назад, и она больше не работает на современной macOS, но её существование доказало, что спрос на эту функцию был.

Появились различные утилиты для строки меню и скрипты, чтобы заполнить пробел. Одни следят за дисками и предупреждают вас до возникновения проблем с извлечением. Другие автоматизируют процесс с lsof, чтобы вам не приходилось вводить команды Терминала.

Этим инструментам не следовало бы существовать. Функциональность, которую они предоставляют, — это базовая возможность операционной системы, которую Apple решила не показывать.

Как выглядело бы исправление

Минимальное жизнеспособное исправление просто: изменить диалог ошибки так, чтобы он сообщал, какой процесс блокирует извлечение. «Диск нельзя извлечь, потому что Spotlight его индексирует» точно говорит вам, что происходит. Вы можете дождаться окончания индексирования, или завершить Spotlight, или решиться на принудительное извлечение, зная риск.

Более удачное исправление добавило бы возможность завершить блокирующий процесс прямо из диалога. «Safari держит файлы открытыми на этом диске. [Завершить Safari и извлечь] [Отмена]» решает проблему в один клик, не требуя от пользователей рыться в Мониторинге системы.

Идеальное исправление было бы упреждающим: предупреждать пользователей, когда у них есть несохранённые изменения на внешнем диске или когда фоновые процессы активно его используют. Сообщать людям заранее, до того как они попытаются извлечь диск и разочаруются.

Ничто из этого технически не сложно. Самая трудная часть, вероятно, — продуктовое решение вообще сделать это изменение.

А пока

Apple может это в итоге исправить. Известно, что они берутся за давние раздражители, когда звёзды сходятся. А до тех пор обходные пути остаются теми же: команды Терминала, детективная работа в Мониторинге системы или инструменты вроде Ejecta, которые делают детективную работу за вас.

Отключение диска не должно быть таким сложным. Но оно сложное, и было сложным годами, и Apple, похоже, всё равно.

Если вам не хочется каждый раз обращаться к Терминалу, Ejecta точно покажет, какой процесс блокирует ваш диск, — и позволит завершить его одним кликом прямо из строки меню.

Купить — $9.99