FAQ: Ошибка 45 в Time Machine

Если вы хотите увидеть на нашем сайте ответы на интересующие вас вопросы обо всём, что связано с техникой Apple, операционной системой Mac OS X (и её запуском на PC), пишите нам через форму заявки на обзор или форму обратной связи.

К нам поступил следующий вопрос:

Здравствуйте. Окажите, пожалуйста,
помощь в настройке Time Machine. Хитрость
заключается в том, чтоб ТМ сохраняла
резервные копии на любой (указанный)
расшаренный диск в локальной сети.
В локалке Мас’и, Win и NAS. Мне удалось с
помощью терминала заставить ТМ видеть
расшаренные диски в сети, но при создании
копии появляется ошибка (45) о
невозможности создания какого то бандла.

Мне необходимо сохранять резервные
копии ТМ с 2 Мас’ов на диск Win’ды. (полный
объем на резервную копию).
Прошу дать ответ, если возможно, на
электронную почту (как создать этот
бандл), т.к. на долгое время покидаю
стационарный iMac и не дождусь Вашей
публикации на сайте.
Заранее благодарен и всего хорошего.

Как вы правильно заметили, ошибка 45 означает невозможность Time Machine работать со специальным бандлом на томе для копирования. Соответственно, чтобы решить эту проблему, нужно самостоятельно заняться сборкой бандла. Но сначала напомним другим читателям, как можно заставить Time Machine видеть сетевые диски. Это делается или терминальной командой:

[php]defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1[/php]

или через панель настроек Secrets, о которой мы когда-то писали. Есть и другие софтовые решения для доступа к скрытым настройкам Mac OS X.

Но проблема в том, что даже если Mac OS X видит том, это не означает, что она станет на него писать. Это очень капризная функция системы, которая имеет ряд жёстких требований. Одно из них — наличие специального «спарсбандла» (sparsebundle). Этот файл должен создаваться автоматически и представляет собой виртуальный образ диска. Но создать его Time Machine может не всегда. Предлагаем такой способ решения этой проблемы:

  • нужно узнать MAC-адрес основной сетевой карты компьютера, с которого происходит бэкап
  • нужно узнать сетевое имя компьютера, с которого происходит бэкап
  • нужно создать бандл вручную через Терминал и скопировать его на целевой сетевой диск

Обо всём по порядку. MAC-адрес (он никакого отношения к Макам не имеет, это идентификатор для сетевых карточек) узнаётся в сведениях о системе. Нажмите на яблочко в строке меню, выберите пункт «Об этом компьютере», затем нажмите «Подробнее». В открывшемся окне слева выберите пункт «Размещения». Найдите интерфейс, у которого «Имя BSD-устройства» равно «en0». Рядом с этим пунктом будет сам MAC-адрес, разделённый двоеточиями. Он-то вам и нужен:

C сетевым именем ещё проще. Запустите через Spotlight Терминал и посмотрите, что написано в самой нижней строке слева перед двоеточием. Это и есть имя компьютера в сети. На нашем примере — ArkMac.

Не отходя от кассы, введите в Терминале команду создания бандла. Замените NETWORKNAME на сетевое имя, а MACADDRESS — на Mac-адрес. В MAC-адресе удалите все двоеточия. Должно остаться ровно 12 символов. Вместо 500g введите максимальный объём пространства, которое могут занять резервные копии (в гигабайтах, например, 200g). Обратите внимание: созданный файл будет занимать намного меньше места. Тот размер, который вы вводите — теоретический максимум, до которого сможет раздуться ваш образ-бандл.

[php]sudo hdiutil create -size 500g -type SPARSEBUNDLE -nospotlight -volname "Backup of NETWORKNAME" -fs "Case-sensitive Journaled HFS+" -verbose ~/Desktop/NETWORKNAME_MACADDRESS.sparsebundle[/php]

Затем можете скопировать с Рабочего стола бандл в корень того сетевого диска, где вы хотите хранить бэкапы.

Если и перечисленных мер окажется недостаточно, то в созданный образ нужно добавить текстовый файл с именем com.apple.TimeMachine.MachineID.plist следующего содержания:

[php]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "<a href="http://www.apple.com/DTDs/PropertyList-1.0.dtd" target="_blank">http://www.apple.com/DTDs/PropertyList-1.0.dtd</a>">
<plist version="1.0">
<dict>
<key>com.apple.backupd.HostUUID</key>
<string>UUID</string>
</dict>
</plist>
[/php]

UUID нужно заменить на строку UUID вашего компьютера, которую можно узнать из той же утилиты «Сведения о системе» в секции общих свойств об оборудовании.

Полученный файл с расширением plist нужно скопировать внутрь образа. Допустим, и файл, и образ лежат на рабочем столе. Введите в Терминале:

[php]cd ~/Desktop

cp com.apple.TimeMachine.MachineID.plist NAME.sparsebundle[/php]

Разумеется, вместо NAME.sparsebundle нужно ввести реальное название вашего образа.

Удачи в настройке Time Machine и спасибо за внимание к сайту ;)