Time Machine : péripéties

how-to

Apple's Time Machine

L'autre jour, j'ai eu la mauvaise surprise de constater que notre Time Machine qui s'occupe de sauvegarder la quasi totalité des fichiers de l'entreprise (oui, oui...) ne fonctionnait plus. Bien évidemment, cette saleté ne dit pas ce qui lui arrive et pire encore, elle ne prévient pas. Elle se contente de remettre sa sauvegarde à plus tard...

Première étape dans la résolution du problème : comprendre ! Après avoir soupçonné le matériel, j'ai bien entendu jeté un petit coup d'oeil dans les logs. Je n'ai malheureusement rien trouvé de vraiment significatif, si ce n'est que le montage du volume de sauvegarde avait l'air de poser problème. J'ai donc décidé de faire quelques vérifications de ce côté là, en commençant par le fichier sparsebundle utilisé par la Time Machine. Bingo ! En essayant de l'ouvrir via le Finder, le journal fait apparaître l'erreur suivante :

disk5s2: oictl(_IOW, 'd', 24, 4) is unsupported

Je sais par expérience qu'il est assez difficile de décoder certains messages d'erreur d'Apple. Autant dire que pour celui-ci, je n'ai même pas essayé.

Je suis passé directement à l'étape 2 : résolution du problème. J'ai commencé par faire une simple réparation du sparsebundle via l'Utilitaire de disque (Disk Utility, pour les intimes). Il suffit de glisser le fichier défectueux sur l'icône de l'application et de choisir Repair disk. Bien évidemment, ça n'a pas fonctionné.

A ce stade, j'avais à peu près 2 solutions :

  • laisser tomber, supprimer tous les fichiers sur le volume de sauvegarde et repartir avec une toute nouvelle sauvegarde. Ça impliquait aussi de perdre les 6 derniers mois de sauvegardes, ce qui est assez moyen.
  • trouver un autre moyen de réparer ce fichu sparsebundle.

J'ai pris l'option numéro 2, et je suis donc passé à l'étape numéro 3 : retrousser les manches.

Première chose à faire : s'assurer que la Time Machine est désactivée. Dans mon cas, elle était bloquée, essayant vainement de monter son volume de sauvegarde - huhuh. Le bouton Stop backing up n'a pas eu grand effet... J'ai donc modifié sa configuration et, à l'endroit où l'on peut choisir le volume de sauvegarde, j'ai choisi Aucun. Résultat immédiat et radical, la voilà stoppée et même désactivée :)

J'ai ensuite ouvert une session SSH sur le serveur où se trouve le fichier sparsebundle. Le but est d'utiliser fsck_hfs pour réparer le sparsebundle. Mais, celui-ci étant une image disque, il ne peut pas être réparé par fsck_hfs directement. Il faut donc l'attacher au système, mais surtout ne pas le monter ! hdiutil permet de faire ça assez simplement (en tant que root, bien entendu) :

bash-3.2# hdiutil attach -nomount -readwrite fichier.sparsebundle
/dev/disk5              Apple_partition_scheme
/dev/disk5s1            Apple_partition_map
/dev/disk5s2            Apple_HFSX

Une fois le sparsebundle attaché, il ne reste plus qu'à lancer fsck_hfs (toujours en root) et s'armer de patience. Il a fallu près de 24h pour réparer le fichier d'environ 650 Go !

bash-3.2# fsck_hfs -rf /dev/disk5s2
** /dev/rdisk5s2
** Checking Journaled HFS Plus volume.
** Detected a case-sensitive catalog.
** Checking Extents Overflow file.
** Checking Catalog file.
** Rebuilding Catalog B-tree.
** Rechecking volume.
** Checking Journaled HFS Plus volume.
** Detected a case-sensitive catalog.
** 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.
   Volume Bit Map needs minor repair
** Checking volume information.
   Invalid volume file count
   (It should be 13078289 instead of 13169047)
   Invalid volume directory count
   (It should be 494240 instead of 497264)
   Invalid volume free block count
   (It should be 838745943 instead of 838680300)
   Volume Header needs minor repair
(2, 0)
** Repairing volume.
** Rechecking volume.
** Checking Journaled HFS Plus volume.
** Detected a case-sensitive catalog.
** 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 Time Machine Backups was repaired successfully.

Hurray !

Enfin, j'ai détaché le volume :

bash-3.2# hdiutil detach /dev/disk5

Et j'ai pu remonter ma sauvegarde Time Machine tout en conservant les anciennes sauvegardes. Mission accomplie :)