Uso de Time Machine en una Time Capsule: las copias de seguridad funcionan sin problemas. El problema es intentar utilizar 'tmutil compare' para ver las diferencias entre 2 copias de seguridad. MacOS Mojave 10.14.5 (mismo problema en la versión anterior del sistema operativo).
La aplicación
Utilice Time Machine para realizar copias de seguridad de varias Mac en la red en varias unidades de copia de seguridad. La intención es ejecutar periódicamente operaciones de 'tmutil compare' para ver qué se está respaldando, cuántos archivos, cuántos datos, etc.
Aplicaciones como BackupLoupe proporcionarán una GUI de esto, lo cual es bueno, pero debes montar manualmente cada paquete disperso. (Y por cierto, parece haber dejado de funcionar con Mojave).
Entonces la intención era automatizar el proceso:
- Utilice tmutil Destinationinfo para determinar una lista de las unidades de respaldo.
- Monte todas las unidades (para separar puntos de montaje)
- Examine cada unidad para obtener una lista de las Mac (es decir, mymac1.sparsebundle, mymac2.sparsebundle, ...)
- Para cada Mac, para cada unidad (que tiene un paquete disperso para esa Mac), monte el paquete disperso, asegúrese de que tenga un nodo Backups.backupdb, enumere todas las copias de seguridad (2019-05-22-111213), ejecute un 'tmutil comparar' entre cada asiento y el asiento del procedimiento.
Se mantiene automáticamente un caché para que el paso 'tmutil compare' se ejecute solo para nuevas copias de seguridad.
Dado que la 'comparación de tmutil' puede llevar mucho tiempo, el paso (4) se diseñó para que se procese cada Mac y se inicien subprocesos separados, uno para cada disco, para ejecutarse en paralelo. Se supone que iniciar más subprocesos para Mac adicionales simplemente representaría un cuello de botella al competir por el acceso a las mismas unidades.
Esto funciona
Utilice Finder para conectarse a Time Capsule (crea /Volumes/mydisk detrás de escena). En Finder, ubique el paquete mymac.sparsebundle de interés y ábralo con DiskImageMounter (crea /Volumes/Time Machine Backups detrás de escena).
Vaya a la terminal y:
cd "/Volumes/Time Machine Backups/Backups.backupdb/mymac"
tmutil compare 2019-05-19-034451 2019-05-18-220446
El resultado es exactamente el esperado.
Esto falla
Cree 2 directorios: ../mytemp/mount y ../mytemp/bundle (como puntos de montaje). Ejecute tmutils Destinationinfo para obtener las cadenas de montaje.
Ejecutar: mount_afp -o rw "afp://tc:pwd@tc._afpovertcp._tcp.local./diskname" ../mytemp/mount
Ejecutar: hdiutil adjuntar ../mytemp/mount/mymac.sparsebundle -readwrite -mountroot ../mytemp/bundle
Ejecutar: cd "../mytemp/bundle/Time Machine Backups/Backups.backupdb/mymac"
Todos estos funcionan como se esperaba. mymac.sparsebundle está montado en ../mytemp/bundle. Puede 'cd' en el paquete disperso montado. Un 'ls' enumera todos los archivos de respaldo como se esperaba.
PERO ejecute: tmutil compare 2019-05-19-034451 2019-05-18-220446 nuevamente y obtenga esto:
Must specify at least one item inside a backup.
En realidad, se puede hacer 'cd' en la copia de seguridad 2019-05-19-034451 o en la otra, 'ls' muestra exactamente lo que se espera. Puede 'cd' bajar varios niveles, 'cat' algunos archivos a la consola, etc.
Bajé a los mismos niveles después de montar en ambos sentidos y emití 'touch dummy.file.txt' para crear un archivo. Esto falló, pero se logró agregar 'sudo', en ambos escenarios de montaje. (Dentro de una copia de seguridad determinada, esto falló en cualquiera de las configuraciones).
También probé 'sudo tmutil ...' en caso de problemas de autorización, pero obtuvo el mismo resultado. También hice algunos comandos 'ls -la' en varios niveles, pero no hubo diferencias obvias en el 'rwx' asignado a nada.
Se agregó tmutil a la lista Acceso total al disco en Propiedades del sistema.
Ejecutó: mostrar registro --predicate 'process=="tmutil"'
pero muestra el mismo resultado tanto para los casos exitosos como para los fallidos.
¡Al extremo de los ingenios! ¿Cuál es la diferencia: contexto, autoridades, ??? ¿Qué hacen Finder y DiskImageMounter de manera diferente a mount_afp y hdiutil? ¿Algún nivel es de solo lectura y tmutil está intentando actualizar un registro?
¡Cualquier ayuda o sugerencia muy apreciada!
Actualizar
Divida los 2 escalones - monte elconducircon mount_asp, luego monte elmanojocon DiskImageManager, y esto funciona. Entonces el problema radica en el uso de hdiutil frente a DiskImageManager.
Actualización 2
Sigue siendo un WIP, pero aparentemente 'tmutil'requiereque el paquete se monte dentro de /Volumes!
Intenté engañarlo creando un enlace simbólico:
/Volumes/Time Machine Backups -> my mount point
pero todavía falla. Intentar otras soluciones.
¿Alguien sabe si este es un requisito real de tmutil? ¿Está documentado en alguna parte?
Resuelto (¡pero un truco!)
Intenté agregar un punto de montaje raíz a/Volumes, con la idea de luego montar varios paquetes dispersos a continuación, pero tampoco funcionó. Evidentemente, 'tmutil' espera que el paquete se monte como hijo inmediato de /Volumes.
Truco final de la siguiente manera:
- Cree un punto de montaje para las unidades: ../mycache/drives
- Monte todas las unidades debajo de este nodo
- montar todomanojosdentro de /Volumes usando el nombre predeterminado normal: Time Machine Backups [n]
- Internamente, averigüe qué montaje coincide con cada unidad enumerando todas las variedades de copias de seguridad de Time Machine [n], luego monte el paquete, obtenga la lista de copias de seguridad de Time Machine [n] nuevamente para determinar cuál es el nuevo montaje.
- Luego ejecute tmutil compare /Volumes/Time Machine Backups 2/Backups.backupdb/mymac/...
Esto funciona razonablemente bien. Fallará si algún otro proceso monta un paquete disperso con una entrada de Copias de seguridad de Time Machine; confundirá la lógica anterior.