Как Time Machine (на MacBook Pro High Sierra с APFS) узнает, какие файлы в папке изменились с момента последней резервной копии? Я знаю, что TM использует FSEvents для поиска каталогов с измененными файлами. Чего я не знаю, так это того, что делает ТМ, когда узнает, что 1+ файлов в папке изменились. Я ищу подробное техническое объяснение, а не информацию высокого уровня о самой Time Machine. Конкретно:
Я спрашиваю, потому что пытаюсь диагностировать медленные инкрементные резервные копии Time Machine на моем MacBook Pro конца 2015 года, работающем под управлением High Sierra. Каждое «ежечасное» резервное копирование занимает более 30 минут, даже если объем данных, резервируемых каждый раз, составляет менее 2 ГБ.
Глядя на журналы активности диска Time Machine (с использованием sudo fs_usage -f filesys backupd
), виновником, по-видимому, является доступ к файловой системе неизмененных файлов сообщений и вложений, связанных с Outlook 2016 Mac.
Outlook создает 256 папок для сообщений и 256 папок для вложений и равномерно распределяет новые сообщения и вложения по этим папкам. Например, в моем профиле Outlook содержится около 250 000 сообщений, большинство из которых имеют более 1 вложения. Каждая из этих 512 папок содержит около 1000 сообщений. Я получаю около 500 новых сообщений в день, поэтому, если с момента последнего резервного копирования прошел день, в каждой из этих 512 папок будет 1-3 новых файла и около 1000 неизмененных файлов.
Глядя на журналы файловой системы, Time Machine делает много вызовов файловой системы для каждого файла, хотя только несколько сотен файлов были изменены из более чем 500 000 файлов в этих папках. Доступ к файловой системе для каждого неизмененного файла быстрый (~0,075 секунды в приведенном ниже примере журнала), но если вы умножите 0,075 секунды на 500 000 файлов, это составит более 10 часов! Time Machine запускает несколько потоков, поэтому каждое добавочное резервное копирование занимает не 10 часов, а более 30 минут для каждого «ежечасного» резервного копирования.
Это большой расход батареи и доступ к диску для просмотра более 500 000 файлов каждый час, которые не изменились. Обратите внимание, что 30+ минут — это скорость TM после того, как я использовал sudo sysctl debug.lowpri_throttle_enabled=0
. Без этого изменения он еще медленнее.
Я пытаюсь выяснить основную причину проблемы:
Вот образец журнала (для одного файла, который не изменился с момента последней резервной копии), который предполагает, что Time Machine выполняет много обращений к файловой системе для каждого неизмененного файла. Я насчитал 11 (!!!) обращений к файловой системе для этого одного 901-байтового файла, резервная копия которого уже сохранена и не изменилась с момента последней резервной копии.
09:14:19.783112 getattrlist .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.000027 backupd.944294
09:14:19.783424 fsctl .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.000006 backupd.944294
09:14:19.783428 fsctl .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.000004 backupd.944294
09:14:19.783542 getattrlist .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.000057 backupd.944294
09:14:19.783603 listxattr .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.000016 backupd.944294
09:14:19.783612 listxattr .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.000008 backupd.944294
09:14:19.805903 listxattr .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.022290 backupd.944294
09:14:19.806028 listxattr .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.000109 backupd.944294
09:14:19.856232 HFS_update (__M__c__) .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.000013 backupd.948297
09:14:19.856258 link .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.050019 backupd.948297
09:14:19.856394 getattrlist .Office/Outlook/Outlook 15 Profiles/2018-05-11/Data/Message Attachments/137/8969C57E-7F6D-4152-AF11-FDF535486C92.olk15MsgAttachment 0.000051 backupd.948297
Я знаю, что могу исключить папки Outlook из резервных копий Time Machine, но не решаюсь сделать это, поскольку это может помешать мне восстанавливать сообщения.
Я уже пытался удалить журналы FSEvents (с помощью sudo mv /.fseventsd /.fseventsd.bak
перезагрузки) и разрешить их повторное создание, что значительно ускорило резервное копирование, так что оно займет всего несколько минут, если я не запускал Outlook с момента последнего резервного копирования. . Но после запуска Outlook резервное копирование занимает более 30 минут. Просматривая журналы, я убедился, что дополнительное время связано не с объемом данных резервного копирования — Outlook.sqllite
файл размером 1,3 ГБ копируется каждый раз за 1–2 минуты — а вместо этого, похоже, вызван сотнями тысяч файлов, которые Машина времени смотрит, но не отступает.
Это не проблема сети и не проблема скорости моего резервного NAS-накопителя: когда TM резервирует большие файлы, он копирует 10-30 мегабайт в секунду через WiFi (у меня быстрый WiFi!). Кроме того, прямое подключение к моей гигабитной сети не увеличивает скорость, когда TM перебирает все эти крошечные файлы Outlook.
ОБНОВЛЯТЬ:
Как посоветовал Monomeeth в своем ответе ниже, я скачал и запустил Time Machine Mechanic (действительно полезный инструмент!). Вот результаты за последние 12 часов.
Analysis from 2018-05-23 19:38:58 +0000 to 2018-05-24 05:38:58 +0000 for 10 hours:
Backing up to /dev/disk2s2: /Volumes/Time Machine Backups/Backups.backupdb
on which there were 411.74 GB, 411.74 GB, 411.74 GB, 411.74 GB, 411.74 GB, 411.74 GB available.
Started 6 auto backups, and 0 manual backups; completed 7 backups successfully,
last backup completed successfully 7.0 minutes ago,
backed up a total of 16417 files, range 639 to 4666 in each backup,
total data for each backup was 2.09 GB, 2.1 GB, 1.89 GB, 1.58 GB, 1.66 GB, 1.59 GB, 1.54 GB.
Times taken for each auto backup were 93.8, 37.8, 29.8, 34.4, 35.4, 87.6 minutes,
intervals between the start of each auto backup were 140.5, 70.8, 63.4, 69.9, 65.9 minutes.
Created 0 new backups, and deleted 7 old backups,
cancelled 4 backups.
7 errors reported:
2018-05-23 13:27:42.967395-0700 Error: Error Domain=NSOSStatusErrorDomain Code=-50 "paramErr: error in user parameter list" deleting backup: /Volumes/Time Machine Backups/Backups.backupdb/Justin’s MacBook Pro/2018-05-23-113921.inProgress/B14EC326-8AE7-4C23-8F37-17BDEFCF9F1C
2018-05-23 20:33:49.535143-0700 Error: Error Domain=NSOSStatusErrorDomain Code=-36 "ioErr: I/O error (bummers)" deleting backup: /Volumes/Time Machine Backups/Backups.backupdb/Justin’s MacBook Pro/2018-05-21-163447
2018-05-23 20:33:49.536821-0700 Error: Error Domain=NSOSStatusErrorDomain Code=-50 "paramErr: error in user parameter list" deleting backup: /Volumes/Time Machine Backups/Backups.backupdb/Justin’s MacBook Pro/2018-05-22-193257
2018-05-23 20:33:49.536960-0700 Error: Error Domain=NSOSStatusErrorDomain Code=-50 "paramErr: error in user parameter list" deleting backup: /Volumes/Time Machine Backups/Backups.backupdb/Justin’s MacBook Pro/2018-05-22-183736
2018-05-23 20:33:49.537620-0700 Error: Error Domain=NSOSStatusErrorDomain Code=-50 "paramErr: error in user parameter list" deleting backup: /Volumes/Time Machine Backups/Backups.backupdb/Justin’s MacBook Pro/2018-05-22-150607
2018-05-23 20:33:49.537704-0700 Error: Error Domain=NSOSStatusErrorDomain Code=-50 "paramErr: error in user parameter list" deleting backup: /Volumes/Time Machine Backups/Backups.backupdb/Justin’s MacBook Pro/2018-05-22-134626
2018-05-23 20:33:49.539118-0700 Error: Error Domain=NSOSStatusErrorDomain Code=-50 "paramErr: error in user parameter list" deleting backup: /Volumes/Time Machine Backups/Backups.backupdb/Justin’s MacBook Pro/2018-05-22-120245
Обратите внимание, что глубокого сканирования нет, и каждая резервная копия занимала не менее 30 минут, чтобы создать резервную копию 1,5–2 ГБ. Большую часть занимает один файл Outlook.sqllite объемом 1,3 ГБ, резервная копия которого, судя по журналам файловой системы, создается примерно за 2 минуты, что составляет около 10 мегабайт в секунду. Но большую часть времени (опять же согласно журналам файловой системы) занимает чтение/проверка 100 000 неизмененных файлов.
Это нормально? Кажется неожиданным, что TM знает, какие файлы были изменены (через FSEvents), но все равно должен просматривать каждый файл. Есть ли что-то необычное в файлах Outlook, из-за чего это происходит с файлами Outlook, но не с файлами других приложений? Может быть, Outlook использует расширенные атрибуты (например, атрибуты «Автор» и «Получатель» в файлах сообщений электронной почты), и именно эти атрибуты вызывают замедление?
Я не уверен, что делать с ошибками, но они имеют в виду удаление резервных копий. Возможно, это не связано с моими медленными резервными копиями?
КОРОТКИЙ ОТВЕТ
Да, это ожидаемое поведение.
Time Machine создает резервные копии только новых или измененных данных и ведет учет любых удаленных данных. Это включает в себя библиотеки, которые могут содержать десятки тысяч файлов (например, ваша библиотека фотографий) и другие местоположения (например, каталоги/папки, содержащие большое количество файлов (например, используемые MS Outlook). Он не делает новую резервную копию Вся библиотека/папка каждый раз, когда вы вносите в нее изменения, но создает резервные копии только тех элементов, которые были изменены.Чтобы Time Machine делала это правильно, необходимо проверять каждый элемент, чтобы определить, что изменилось с момента последнего резервного копирования.
ДЛИННЫЙ ОТВЕТ
Принцип работы Time Machine заключается в том, что он создает резервную копию всего, что изменилось с момента последнего резервного копирования. Например, файл, который:
Теперь путаница обычно возникает из-за того, как Time Machine фактически делает резервную копию. Я попытаюсь объяснить это ниже.
Весь этот процесс предназначен для того, чтобы Time Machine не только создавала резервную копию ваших данных, но и запоминала, как они выглядели в определенный момент времени, чтобы пользователям было легче найти то, что они ищут. Согласно Apple:
...Что отличает Time Machine от других приложений для резервного копирования, так это то, что оно не только хранит запасную копию каждого файла, но и запоминает, как ваша система выглядела в любой конкретный день, поэтому вы можете вернуться к своему Mac, как он выглядел в прошлом.
Источник: Mac Basics: Time Machine (веб-архив документа базы знаний Apple)
Так что да, это ожидаемое поведение. Используя пример в вашем вопросе, хотя вы считаете 11 случаев, все они вместе взятые заняли доли секунды для обработки Time Machine, и, с моей точки зрения, это стоит того спокойствия и удобства использования, что Time Предлагает машина.
Короче говоря, я бы не рекомендовал пытаться вмешиваться в это.
[ОБНОВЛЯТЬ]
Это обновление не заменяет приведенную выше информацию высокого уровня, но обеспечивает дополнительную ясность благодаря пересмотру вопроса ОП, который обеспечивает дополнительный контекст вокруг вопроса.
Как вы знаете, Time Machine сверяется с базой данных событий файловой системы (FSEvents), хранящейся на каждом томе, чтобы определить, какие файлы были изменены с момента последнего резервного копирования.
Однако, если база данных FSEvents отсутствует или Time Machine определяет, что она повреждена или неполна, она выполнит глубокое сканирование. Если он выполняет глубокое сканирование, это означает, что он проверит отметку времени последнего изменения всех файлов (и каталогов) на соответствующем томе . В рамках этого глубокого сканирования Time Machine создает список всех элементов, которые изменились с момента последнего резервного копирования. Очевидно, что если вы выполняете резервное копирование на удаленное устройство (особенно через Wi-Fi), это действительно замедляет работу.
Хотя вы можете отключить запись FSEvent на томе, это вам не поможет, потому что вы хотите использовать Time Machine для резервного копирования своих данных, и это действие только заставит его выполнить глубокое сканирование.
В свете дополнительной информации, которую вы предоставили, вам нужно определить две вещи:
Чтобы ответить на первый вопрос, вы можете скачать и установить Time Machine Mechanic (T2M2) . Это анализирует ваши журналы, чтобы проверить, работают ли резервные копии Time Machine нормально или нет.
Главное в вашем случае — проверить, указывает ли T2M2 следующее:
started 1 deep traversal scans
completed 1 deep traversal scans
Если использование вышеуказанного инструмента указывает на то, что Time Machine действительно выполняет глубокое сканирование, это может вызывать беспокойство. Не так сильно, если это случайная вещь, так как это все равно может произойти после определенных событий (например, недавняя загрузка с другого тома, после полного восстановления, после отключения питания и т. д.), но если это происходит постоянно, то это происходит звонить в тревожные звоночки. В этом случае я отсылаю вас к Time Machine — Устранение неполадок с общими сообщениями резервного копирования .
Джастин Грант
мспасов
Джастин Грант
мспасов
мономет
Джастин Грант
мономет
Джастин Грант
мономет
Джастин Грант
Джастин Грант
Джастин Грант
Джастин Грант
fs_usage
, даже с-w
опцией, обрезал переднюю часть пути, из-за чего было невозможно определить, был ли это диск моего ноутбука или удаленный резервный диск, на который читались и записывались. (продолжение ниже)Джастин Грант
мономет