¿Cómo sabe Time Machine (en un MacBook Pro High Sierra con APFS) qué archivos de una carpeta han cambiado desde la última copia de seguridad? Sé que TM se basa en FSEvents para buscar directorios con archivos modificados. Lo que no sé es qué hace TM cuando se entera de que 1+ archivos en una carpeta han cambiado. Estoy buscando una explicación técnica detallada, no información de alto nivel sobre Time Machine en sí. Específicamente:
- ¿Qué información sobre cada archivo (por ejemplo, en una carpeta con 1 archivo modificado y 999 archivos sin cambios desde la última copia de seguridad) utiliza TM para determinar qué archivos son iguales a la última versión respaldada? ¿Mira TM sólo el tamaño del archivo y la hora de modificación? ¿Lee realmente el contenido de los archivos? ¿Lee los atributos de los archivos?
- ¿Qué llamadas a la API del sistema de archivos utiliza Time Machine para comprobar qué archivos han cambiado? Específicamente, ¿hace una (o un pequeño número) de llamadas por carpeta, por ejemplo, para obtener un listado de directorios? ¿O realiza más de una llamada? por archivo para obtener información adicional como el contenido de los archivos, los atributos, etc.?
- Si las respuestas a las preguntas anteriores varían (por ejemplo, "a veces TM hace XXX, a veces YYY"), entonces ¿cuáles son las razones por las que TM estaría haciendo muchas llamadas al sistema de archivos para cada sin cambios ¿archivo en una carpeta?
Lo pregunto porque estoy intentando diagnosticar la lentitud de las copias de seguridad incrementales de Time Machine en mi MacBook Pro de finales de 2015 con High Sierra. Cada copia de seguridad "horaria" tarda más de 30 minutos en completarse, a pesar de que la cantidad de datos respaldados cada vez es inferior a 2 GB.
Mirando los registros de la actividad del disco de Time Machine (usando sudo fs_usage -f filesys backupd
), el culpable parece ser el acceso al sistema de archivos de los archivos de mensajes y adjuntos no modificados asociados a Outlook 2016 Mac.
Outlook crea 256 carpetas para los mensajes y 256 carpetas para los archivos adjuntos, y distribuye uniformemente los nuevos mensajes y archivos adjuntos entre estas carpetas. Por ejemplo, mi perfil de Outlook tiene unos 250.000 mensajes, la mayoría de los cuales tienen más de un archivo adjunto. Cada una de esas 512 carpetas contiene unos 1.000 mensajes. Recibo unos 500 mensajes nuevos al día, así que si ha pasado un día desde mi última copia de seguridad, cada una de esas 512 carpetas tendrá entre 1 y 3 archivos nuevos y unos 1.000 archivos sin modificar.
Mirando los registros del sistema de archivos, Time Machine está haciendo muchas llamadas al sistema de archivos para cada archivo, a pesar de que sólo unos pocos cientos de archivos han cambiado de los más de 500.000 archivos en estas carpetas. El acceso al sistema de archivos para cada archivo no modificado es rápido (~0,075 segundos en el ejemplo de registro que se muestra a continuación), pero si se multiplica 0,075 segundos por 500K archivos, ¡son más de 10 horas! Time Machine ejecuta múltiples hilos, por lo que cada copia de seguridad incremental no tarda 10 horas, sino que tarda más de 30 minutos en cada copia de seguridad "horaria".
Eso es mucho uso de la batería y acceso al disco para mirar más de 500.000 archivos cada hora que no han cambiado. Tenga en cuenta que 30+ minutos es la velocidad TM después de He utilizado sudo sysctl debug.lowpri_throttle_enabled=0
. Sin este cambio, es aún más lento.
Estoy tratando de averiguar la causa del problema:
- ¿Es por la configuración de mi ordenador? ¿Hay algún cambio que pueda hacer en mis archivos, en la configuración de Time Machine, etc. que haga que TM deje de dedicar tanto tiempo a examinar los archivos no modificados en cada copia de seguridad incremental?
- ¿El problema es fundamental para la forma en que Outlook 2016 Mac almacena los mensajes y los archivos adjuntos, por lo que todos los usuarios de Mac de Outlook con un buzón grande y activo tendrán este problema? Por ejemplo, ¿hace Outlook algo inusual con los atributos que puede hacer que TM pase más tiempo examinando los archivos de Outlook en comparación con otras aplicaciones que crean muchos archivos pequeños?
- ¿O la causa principal está en el diseño de Time Machine, donde se espera que si algún archivo de una carpeta ha cambiado, entonces TM hará llamadas relativamente costosas al sistema de archivos para cada archivo con el fin de verificar qué archivos han cambiado?
Aquí hay una muestra de registros (para un solo archivo que no ha sido cambiado desde la última copia de seguridad) que sugiere que Time Machine está haciendo un montón de acceso al sistema de archivos para cada archivo sin cambios. Cuento 11 (¡!) accesos al sistema de archivos para este archivo de 901 bytes del que ya se ha hecho una copia de seguridad y que no ha cambiado desde la última copia de seguridad.
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
Sé que puedo excluir las carpetas de Outlook de las copias de seguridad de Time Machine, pero dudo en hacerlo porque podría impedirme restaurar los mensajes.
Ya he probado a borrar los registros de FSEvents (mediante sudo mv /.fseventsd /.fseventsd.bak
y un reinicio) y permitir que se vuelvan a crear, lo que aceleró considerablemente las copias de seguridad, de modo que sólo tardarán unos minutos si no he iniciado Outlook desde la última copia de seguridad. Pero después de ejecutar Outlook, las copias de seguridad tardan más de 30 minutos. He comprobado, mirando los registros, que el tiempo extra no se debe al volumen de datos de la copia de seguridad: los 1,3 GB. Outlook.sqllite
se hace una copia de seguridad en 1-2 minutos cada vez - pero en su lugar parece ser causada por los 100.000s de archivos que Time Machine está mirando pero no hace una copia de seguridad.
No es un problema de red ni de velocidad de mi unidad NAS de copia de seguridad: cuando TM está haciendo una copia de seguridad de archivos grandes, hace una copia de seguridad de 10 a 30 megabytes por segundo a través de WiFi (¡tengo WiFi rápido!). Además, la conexión directa a mi gigabit ethernet no mejora la velocidad cuando la TM está haciendo una copia de seguridad de todos esos pequeños archivos de Outlook.
ACTUALIZACIÓN:
Tal y como aconseja Monomeeth en su respuesta a continuación, he descargado y ejecutado Mecánico de la máquina del tiempo (¡una herramienta realmente útil!). Aquí está la salida de las últimas 12 horas.
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
Tenga en cuenta que no hay escaneos profundos, y cada copia de seguridad tomó un mínimo de 30 minutos para respaldar 1,5-2 GB. La mayor parte del tamaño es el único archivo Outlook.sqllite de 1,3 GB, del que se hace una copia de seguridad en unos 2 minutos según los registros del sistema de archivos, lo que supone unos 10 megabytes/seg. Pero la mayor parte del tiempo se toma (de nuevo según los registros del sistema de archivos) leyendo/comprobando 100.000's de archivos no modificados.
¿Es esto normal? Parece inesperado que TM tenga conocimiento de los archivos que han cambiado (a través de FSEvents) pero aún así tenga que mirar cada archivo. ¿Hay algo inusual en los archivos de Outlook que hace que esto ocurra con los archivos de Outlook pero no con los de otras aplicaciones? ¿Podría ser que Outlook esté utilizando atributos extendidos (por ejemplo, los atributos "Autor" y "Destinatario" en los archivos de mensajes de correo electrónico) y esos atributos son los que están causando la ralentización?
No sé qué pensar de los errores, pero se refieren a la eliminación de las copias de seguridad. ¿Quizás sea un problema no relacionado con la lentitud de mis copias de seguridad?