Pull to refresh

Восстановление работоспособности iPhoto при зависании импорта

Reading time 3 min
Views 23K
У меня есть хобби — фотографии.
Для каталогизации по воле случая использую штатную Эппловскую программу под названием iPhoto.

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

Недавно столкнулся с проблемой: камера была некорректно удалена во время импорта и, как следствие, в iPhoto повис ползунок «импорт» и программа героически отказывалась завершаться корректно:



Быстрый гуглинг показал что проблема очень распространенная, однако все советуют делать «force quit» c последующим восстановлением медиатеки. Как-то раз я так потерял почти сотню фотографий, поэтому решил искать другие альтернативы решению.

Допускаю, что этот текст кому-то поможет.



Опишу последовательно свои шаги, если вдруг кто-то заметит ошибки в моих размышлениях — просьба поправить.

  1. Повторный, более глубокий гуглинг
    Повторный поиск показал что данная проблема может возникать из-за 2х причин: повреждение прав доступа на диске и неверно отмонтированный диск с которого осуществлялся импорт, в следствие чего он остается в списке, однако доступ к нему осуществлен быть не может.
  2. Создание резервной копии
    На всякий случай я решил сделать копию медиатеки. Time Machine копия была сделана около недели назад и с тех пор в ней были некоторые изменения. Простое дублирование файла не удалось. Система грязно выругалась что файл сейчас используется и отказалась дублировать медиатеку. Тогда было решено сделать ZIP, но не через Finder, а через консоль. Процесс был запущен — пришла пора перейти к другим шагам
  3. Восстановление прав доступа
    Раз пишут, что в этом может быть проблема — нужно попробовать. Анализ дисковой утилитой прав доступа и проверка диска показали что все в полном порядке. Хорошо, двигаемся дальше.
  4. Отмена импорта вручную
    На этом этапе весь iPhoto был изучен на предмет наличия заветной кнопочки «отменить импорт», нажатия же на кнопку «отмена» в интерфейсе ничего не дали.
  5. Поиск ложно примонтированных дисков
    Так как GUI дисковой утилите я в этом вопросе не доверяю, в консоле было введено заклинание «diskutil list». Вывод команды показал что аномалий не замечено и на первый взгляд все хорошо

  6. Поиск процесса импорта
    Ход моих размышлений был прост — если завершить процесс импорта — то iPhoto скорее всего не закроется, а просто закончит импорт. Вероятность краша, конечно сохраняется, но она достаточно мала по сравнению с потерей снимков через «force quit».
    Через штатную утилиту «Мониторинг системы» я попытался найти процесс импорта. Не удалось. Параллельно при изучении подробной информации о процессе iPhoto обнаружил, что импорт выполняется с помощью одного из компонентов QuickTime, однако перезапуск QuickTime ничего не дал, кроме того импорт был отдельным потоком в процессе, а не отдельным процессом, поэтому pid его получить не удалось.
    Параллельно всплыли интересные подробности — iPhoto держал открытыми несколько видео-файлов, исходники которых были уже утеряны, а значит при принудительном завершении работы, эти файлы скорее всего были бы потеряны. Мотивация возросла
  7. Попытка замещения импорта
    Оставалась еще одно интерфейсное решение — сделать импорт в iPhoto большого файла, чтобы начать импорт заново. iPhoto оказался умнее и просто запустил параллельный импорт.
  8. Пауза/Восстановление
    Так как надежды на сохранение медиатеки (речь ведь не только о файлах, но и о структуре) стремительно таяли, а ZIP к тому моменту успешно был создан — я решил попробовать с помощью стороннего файл-менеджера поставить процесс на паузу, а затем запустить вновь. Радужное колесико долго крутилось, но ни к чему конкретному это не привело.
  9. Мягкая попытка завершить приложение
    На одном из форумов было вычитано что если послать iPhoto сигнал, отличный от SIGKILL и подобных — он все таки корректно завершает работу, не повреждая медиатеку. Прочитано — сделано, следующие сигналы были посланы приложению в прямом порядке:
    • SIGCHLD(child status has changed)
    • SIGSTP (stop signal generated from keyboard)
    • SIGALRM (real-time timer expired)

    На последнем iPhoto секунд 7 покрутил радужным колесом и схлопнулся.


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

Надеюсь эти изыскания кому-то помогут в следующий раз сохранить свою фототеку в порядке.
Tags:
Hubs:
+6
Comments 9
Comments Comments 9

Articles