Как помешать iCloud и Dropbox блокировать извлечение диска

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

Вы закрыли все приложения. Вы всё сохранили. Вы нажимаете «извлечь», а macOS говорит, что диск всё ещё используется. Вы запускаете lsof и видите в выводе bird, cloudd или Dropbox. Служба облачной синхронизации удерживает ваш диск в заложниках.

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

Почему службы синхронизации блокируют извлечение

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

Проблема возникает, когда какой-либо из отслеживаемых путей находится на вашем внешнем диске. Это может случиться несколькими способами.

Вы явно разместили синхронизируемую папку на диске. Возможно, вы перенесли папку Dropbox на внешний диск ради места или храните там рабочую папку проекта, которая расшаривается через iCloud Drive.

Приложение создало файл на диске, который перехватила служба синхронизации. Некоторые приложения сохраняют временные файлы, кэши или метаданные проекта на том томе, с которого работают.

Spotlight проиндексировал ваш диск, а служба синхронизации зацепилась за данные индекса. Это косвенный путь, но он случается.

Про iCloud конкретно

Демон синхронизации iCloud в macOS называется bird (да, серьёзно). Вы также увидите cloudd, который обрабатывает часть операций синхронизации. Эти процессы работают как системные службы и перезапускаются автоматически, если их завершить.

Если bird блокирует ваш диск, значит он отслеживает файл или папку на этом томе. Частые причины:

  • Рабочий стол и документы iCloud: если эта функция включена и ваш внешний диск отображается как расположение в Finder, iCloud может индексировать связанные с ним пути.
  • Просмотр и Быстрый просмотр: открытие файла с внешнего диска в приложении «Просмотр» может создать синхронизируемые с iCloud ссылки на недавние файлы.
  • Pages, Numbers или Keynote: эти приложения по умолчанию автоматически сохраняют в iCloud. Если вы открыли документ с внешнего диска, приложение может поддерживать связь между локальным файлом и ссылкой в iCloud.

Чтобы проверить, является ли iCloud вашим блокировщиком:

lsof /Volumes/YourDriveName | grep -i bird
lsof /Volumes/YourDriveName | grep -i cloudd

Про Dropbox конкретно

Dropbox ещё агрессивнее в отслеживании файлов. В современных версиях macOS клиент Dropbox использует фреймворк File Provider от Apple (старый подход с расширением ядра был объявлен устаревшим в macOS 12.3), чтобы отслеживать операции файловой системы в реальном времени.

Если ваша папка Dropbox или любая синхронизируемая с Dropbox папка находится на внешнем диске, Dropbox будет поддерживать постоянные подключения к этому тому. Даже файлы, синхронизация которых завершилась давно, могут иметь открытые дескрипторы Dropbox для целей отслеживания.

Вы также можете увидеть процесс Apple fileproviderd, удерживающий файлы открытыми от имени Dropbox. Это системный демон, который управляет всеми расширениями File Provider, включая Dropbox, OneDrive и Google Drive. Он может создавать дополнительные файловые дескрипторы на томах, которые отслеживают эти службы.

Самый надёжный подход с Dropbox: полностью завершите приложение Dropbox перед извлечением. Нажмите на значок Dropbox в строке меню, нажмите на фото профиля и выберите «Выйти». После извлечения диска снова откройте Dropbox.

Google Drive и OneDrive

Настольное приложение Google Drive (Drive для компьютера) создаёт виртуальный диск, который может взаимодействовать с вашими внешними дисками через файловые операции. Если вы копировали файлы между Google Drive и внешним диском, клиент Drive может поддерживать ссылки.

OneDrive ведёт себя похоже на Dropbox, с фоновым отслеживанием файлов. Обычно он менее агрессивен в удержании файловых дескрипторов, но всё равно может блокировать извлечение.

Обе службы можно приостановить или завершить из их значков в строке меню перед извлечением.

Практический порядок действий

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

У iCloud нет удобной кнопки паузы, но вы можете временно отключить iCloud Drive в разделе Системные настройки > Apple ID > iCloud > iCloud Drive. Правда, это неудобно.

Для Dropbox приостановите синхронизацию через значок в строке меню. Нажмите на значок Dropbox, нажмите на профиль и выберите «Приостановить синхронизацию».

Для Google Drive нажмите на значок Drive в строке меню и выберите «Приостановить синхронизацию».

После приостановки подождите несколько секунд, пока закроются открытые файловые дескрипторы, затем извлеките диск.

Как предотвратить проблему

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

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

Избегайте открытия файлов с внешнего диска приложениями, которые автоматически сохраняют в iCloud (Pages, Numbers, Keynote, «Просмотр»). Или как минимум закройте эти приложения и дайте им мгновение, чтобы освободить файловые дескрипторы, перед извлечением.

Когда приостановки недостаточно

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

Вы можете принудительно освободить эти дескрипторы, завершив конкретный процесс:

kill $(lsof -t /Volumes/YourDriveName)

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

Ejecta делает это более точечно. Она определяет, какие именно процессы удерживают ваш диск, включая демоны облачной синхронизации, и позволяет завершать их по отдельности. Вместо того чтобы завершать всё, что подключено к диску, вы можете нацелиться только на процесс bird или только на вспомогательный процесс Dropbox, который вызывает проблему. Это особенно полезно, когда вы не уверены, какая из нескольких служб синхронизации является виновником.

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

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

Купить — $9.99