Ultimamente he tenido ciertos problemas con las imágenes dinámicas (sparsebundle) que el time machine crea cuando hacemos copias de seguridad en red, bien sea en un time capsule,o en un NAS (como es mi caso). Voy a explicaros como intentar solucionar estos problemas si los llegarais a tener algún dia.
- Un poco de historia:
Desde la version 10.6.3, time machine realize una verificación de las imágenes para comprobar si puede seguir haciendo backup o no. En caso de error, arroja un mensaje similar a este: ”Time Machine ha finalizado la verificación de las copias de seguridad. Para mejorar la fiabilidad, Time Machine tiene que crear una nueva copia de seguridad para ti”. Aceptar esto implica que borramos todo nuestro historial de copias de seguridad, y empezamos de cero… Estupendo no? Como no la imagen no me gusta, pues te borro todo y volver a empezar… Casi que no, vamos a ver si la podemos arreglar.
- Arreglando la imagen:
Antes de empezar debo advertir que es un proceso totalmente en línea de comando (CLI) y que cuidadito con lo que se hace que nos podemos cargar el backup, ni el portal ni yo nos hacemos responsables; dicho esto, vamos al lio!
Las imágenes que crea time machine (sparsebundle) al final no son más que “emulaciones” de discos duros, por así decirlo. Por lo tanto son susceptibles de que puedan ser reparadas con las utilidades propias que nos facilita el mac os para reparación de discos físicos.
Primeramente debemos eliminar los flags que coloca time machine a las copias de seguridad. Para ello, abrimos un terminal, nos hacemos root y ponemos lo siguiente:
linn:~ i5Js$ sudo su - Password: linn:~ root# linn:Volumes root# chflags -R nouchg /Volumes/Backup/Linn.sparsebundle
/Volumes/Backup/Linn.sparsebundle es la ruta de mi imagen de backup, aqui debeis susituirla por la que corresponda en vuestro caso.
Este comando tardará un poco, en función de si la imagen es muy grande o muy pequeña.
Antes del siguiente paso, abrir otro terminal y ejecutar lo siguiente, no es necesario hacerlo como root
linn:~ i5Js$ tail -f /var/log/fsck_hfs.log
Este comando nos saca el log del comando fsck que se ejecutará posteriormente, nos vendrá bien para saber en que paso está y que está haciendo.
Una vez que ha terminado el comando chflags viene le truco que puede salvar nuestros backups. En sistemas unix/linux, podemos conectar un disco usb/firewire etc pero no llegar a montarlo, es decir, el sistema operativo reconoce que tiene algo conectado, pero no lo monta para usarlo. Por lo tanto, con las imagenes pasa lo mismo, asi que tanto si nuestro error es de verificación como de montaje, ejecutamos lo siguiente:
linn:~ root# hdiutil attach -nomount -noverify -noautofsck /Volumes/Backup/Linn.sparsebundle
Debería apareceros algo similar a esto: (el número de disco disk1, puede variar en función del numero de discos duros que tengáis.)
/dev/disk1 Apple_partition_scheme /dev/disk1s1 Apple_partition_map /dev/disk1s2 Apple_HFSX
Anotaros bien el disco que corresponde a la etiqueta Apple_HFSX pues es el que vamos a utilizar.
Como se puede apreciar, la clave está en el flag -nomount del comando. Vuelvo a insistir, que /Volumes/Backup/Linn.sparsebundle es mi imagen, cambiarlo por la vuestra.
Ahora pueden ocurrir dos cosas: la primera es que automáticamente se ejecute el comando fsck, y por lo tanto no tenemos que hacer nada. Lo podemos comprobar en la otra ventana del terminal con el log del fsck, deberíamos encontrar algo similar a esto:
dev/rdisk1s2: fsck_hfs run at Mon Jul 25 11:47:47 2011 /dev/rdisk1s2: ** /dev/rdisk1s2 (NO WRITE) /dev/rdisk1s2: Executing fsck_hfs (version diskdev_cmds-540.1~34). QUICKCHECK ONLY; FILESYSTEM DIRTY /dev/rdisk1s2: fsck_hfs run at Mon Jul 25 11:47:47 2011 /dev/rdisk1s2: ** /dev/rdisk1s2 /dev/rdisk1s2: Executing fsck_hfs (version diskdev_cmds-540.1~34). ** Detected a case-sensitive volume. The volume name is Backup of Linn ** Checking extents overflow file. ** Checking catalog file. ** Checking multi-linked files. ** Checking catalog hierarchy.
Lo segundo que puede ocurrir, es que el comando fsck no se lance automáticamente y lo tengamos que hacer a mano. Para ello ponemos lo siguiente:
linn:~ root# fsck_hfs -drfy /dev/disk1s2
Con esto empezará el chequeo, apareciendo un log similar al anterior. Ahora es cuando os podeis ir a dar una vuelta, al cine, con la novia, a domir, ya que según el tamaño, puede llegar a tardar hasta 24h. Os adjunto mi log para que veais lo que puede salir:
QUICKCHECK ONLY; FILESYSTEM DIRTY /dev/rdisk1s2: fsck_hfs run at Sun Jul 24 09:30:58 2011 /dev/rdisk1s2: ** /dev/rdisk1s2 /dev/rdisk1s2: Executing fsck_hfs (version diskdev_cmds-540.1~34). ** Checking Journaled HFS Plus volume. ** Detected a case-sensitive volume. The volume name is Backup of Linn ** Checking extents overflow file. ** Checking catalog file. ** Checking multi-linked files. Incorrect number of file hard links ** Checking catalog hierarchy. ** Checking extended attributes file. Incorrect number of extended attributes (It should be 4155683 instead of 4155664) ** Checking multi-linked directories. ** Checking volume bitmap. ** Checking volume information. Invalid volume file count (It should be 9116784 instead of 9075531) Invalid volume directory count (It should be 1009463 instead of 998811) Invalid volume free block count (It should be 366540978 instead of 368554972) Volume header needs minor repair (2, 0) /dev/rdisk1s2: ** Repairing volume. Indirect node 72958182 needs link count adjustment (It should be 26 instead of 27) Indirect node 73298165 needs link count adjustment (It should be 28 instead of 27) Indirect node 73298166 needs link count adjustment (It should be 28 instead of 27) Indirect node 73298167 needs link count adjustment (It should be 28 instead of 27) Indirect node 73298168 needs link count adjustment (It should be 28 instead of 27) Indirect node 73298169 needs link count adjustment (It should be 28 instead of 27) Indirect node 73298170 needs link count adjustment (It should be 27 instead of 26) Indirect node 73298171 needs link count adjustment (It should be 15 instead of 14) Indirect node 73298172 needs link count adjustment (It should be 27 instead of 26) Indirect node 73298174 needs link count adjustment (It should be 28 instead of 27) ** Rechecking volume. ** Checking Journaled HFS Plus volume. ** Detected a case-sensitive volume. The volume name is Backup of Linn ** Checking extents overflow file. ** Checking catalog file. ** Checking multi-linked files. ** Checking catalog hierarchy. ** Checking extended attributes file. Invalid map node (8, 0) /dev/rdisk1s2: ** Checking multi-linked directories. ** Checking volume bitmap. ** Checking volume information. ** Repairing volume. ** Rechecking volume. ** Checking Journaled HFS Plus volume. ** Detected a case-sensitive volume. The volume name is Backup of Linn ** Checking extents overflow file. ** Checking catalog file. ** Checking multi-linked files. ** Checking catalog hierarchy. ** Checking extended attributes file. ** Checking multi-linked directories. ** Checking volume bitmap. ** Checking volume information. ** The volume Backup of Linn was repaired successfully.
Si hemos llegado hasta aquí, enhorabuena! tenemos casi lista nuestra imagen para vovler hacer backups. Pero antes de eso, debemos modificar un fichero. Se encuentra dentro de nuestra imagen .sparsebundle y se llama com.apple.TimeMachine.MachineID.plist
linn:~ root# cd /Volumes/Backup/Linn.sparsebundle/ linn:Linn.sparsebundle root# ls -la total 32 -rwxrwxrwx 1 i5Js staff 500 Jan 19 2008 Info.plist drwxrwxrwx@ 59999 i5Js staff 2039922 Jul 24 08:30 bands -rwxrwxrwx 1 i5Js staff 519 Jul 25 11:08 com.apple.TimeMachine.MachineID.plist -r-xr-xr-x 1 i5Js staff 0 Jan 19 2008 token
Lo editamos con el vi, obteniendo algo similar a esto:
?xml version="1.0" encoding="UTF-8"?> !DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> plist version="1.0"> dict> key>RecoveryBackupDeclinedDate date>2011-07-25T09:08:00Z key>VerificationDate date>2011-07-25T09:07:37Z key>VerificationExtendedSkip false/> key>VerificationState integer>2 key>com.apple.backupd.HostUUID string>00000000-0000-1000-8000-001B63B5665E /dict> /plist>
La clave son las líneas RecoveryBackupDeclinedDate y VerificationState. En el caso de la primera, la eliminamos, asi como el campo date que esta a continuación; el campo VerificationState, lo cambiamos a 0. Denería quedaros algo similar a esto:
?xml version="1.0" encoding="UTF-8"?> !DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> plist version="1.0"> dict> key>VerificationDate date>2011-07-25T09:07:37Z key>VerificationExtendedSkip false/> key>VerificationState integer>0 key>com.apple.backupd.HostUUID string>00000000-0000-1000-8000-001B63B5665E /dict> /plist>
Una vez terminado, desmontamos el disco con el comando de más abajoya podemos darle a realizar una copia de seguridad. Volverá a comprobar la integridad de la imagen, pero después empezará a copiar.
linn:/ root# hdiutil eject /dev/disk1s2 "disk1" unmounted.
Enjoy!!
i5Js
Pedazo de tutorial!!
Enhorabuena por la recuperación de los datos
Un abrazo
Saludos amigo, gracias por el tutoríal, esta bastante bueno por que permite conocer más del gran poder del UNIX, realmente este es enorme. Pero bueno, al grano. Yo hice lo que indicas aquí por que me surgió un problema. yo respaldaba mi macbook con un disco externo de 500 Gb. “El disco interno es de 500 Gb” también. El caso es que compre un Time Capsule de 2 TB. y decidí poner ahí mis nuevos respaldos, el Time Machine lo hizo bastante bien, sin embargo vi que aún no se llenaba el disco externo de 500 Gb, así que decidí volver a este con el time machine, pero ahora ya no me deja continuar con el respaldo por que dice que el respaldo que deseo sacar es demasiado grande, lo que asumo que dice es por que quiere hacer un respaldo total nuevo y borrar la data anterior. Yo no quiero eso, si no que continúe con los respaldos como antes, es decir incremental.
Luego de hacer lo que indicas aquí, el time machine sigue diciendo que el respaldo que deseo sacar es muy grande, que requiero mas espacio. Es decir que lo que aquí indicas no funciono en mi caso. ¿que debo hacer?
saludos y gracias por la ayuda.
Hola,
Si, vamos a ver, las instrucciones que he puesto aqui, simplemente es para arreglar un disco de TM o una imagen sparsebundle.
Para solucionar tu “problema” primero tienes que decir si en el Time Capsule está funcionando con imagnes sparsebundle o sin ellas. Igualmente, creo recordar que había una manera de pasar los datos de una sparsebundle a otra, pero tendría que confirmártelo.
De todas maneras, yo seguiría haciendo los backups con el time capsule, y si quieres hacer una partición de 500gb y que lo haga alli.
Saludos