4 votes

Comment Time Machine vérifie-t-il les "corruptions en cours d'exécution" et comment puis-je le réinitialiser ?

Après avoir travaillé assez heureusement pendant des mois, Time Machine, fonctionnant avec un NAS comme destination de sauvegarde, a soudainement décidé que ma sauvegarde était "corrompue" après avoir échoué à un contrôle de "corruption en cours d'exécution" et insiste pour que je supprime l'intégralité (4 téraoctets) de la sauvegarde et recommence!

Ce que je veux savoir, c'est comment Time Machine détermine la "corruption en cours d'exécution" et si je peux en quelque sorte réinitialiser ou désactiver cette vérification?

J'ai déjà vérifié moi-même l'image disque en utilisant les commandes suivantes:

hdiutil attach -nomount /Volumes/Chemin/Vers/Sauvegarde.sparsebundle
diskutil verifyDisk diskN
diskutil verifyVolume diskNs2

En remplaçant les chemins et les numéros de disque lorsque nécessaire, et je n'ai trouvé aucune erreur du tout. Alors exactement, qu'est-ce que vérifie Time Machine?

J'ai également vérifié presque toutes les sauvegardes les plus récentes (en utilisant shasum, en ignorant les fichiers avec des horodatages plus récents) et tout va bien; je ne trouve aucune preuve de quelque chose de corrompu de quelque façon que ce soit, certainement pas parmi les fichiers qui me tiennent le plus à coeur.

C'est vraiment ridicule, car les seuls processus à toucher le bundle sont Time Machine et ses composants liés, il n'y a eu aucun signe de problème de connectivité réseau de quelque nature que ce soit, pas d'autres erreurs dans les journaux, et toutes les autres sauvegardes pour le même jour ont été complétées sans problème. Cela signifie que toute "corruption en cours d'exécution" est très probablement de la faute de Time Machine elle-même!

C'est encore plus ridicule que la seule option présentée soit d'effacer tout, plutôt que de réaliser une traversée en profondeur pour comparer les contenus en détail (pour trouver éventuellement quelque chose de corrompu et le remplacer, même si je ne crois pas du tout qu'il y ait de corruption).

Je ne veux pas me débarrasser de 4 téraoctets de sauvegardes pour une "corruption" vague et non spécifiée qui ne semble même pas exister, donc y a-t-il un moyen de supprimer les données utilisées par Time Machine pour détecter sa mythique "corruption en cours d'exécution" (une vérification qu'il ne semble même pas effectuer avec les disques directement attachés) afin que je puisse simplement continuer à sauvegarder?

EDIT: J'ai obtenu de nouvelles informations, à savoir que la vérification de "corruption en cours d'exécution" de Time Machine est en fait simplement l'exécution de fsck_hfs -q, qui n'a rien à voir avec la corruption, c'est simplement un test pour déterminer si une image disque a été démontée de manière "non propre", ce qui ne garantit pas la corruption (comme je l'ai déjà confirmé).

Malheureusement, malgré avoir réussi à effacer le bit "incohérent" (qui indique un démontage non propre) en utilisant fsck_hfs -p, Time Machine refuse toujours d'utiliser cette sauvegarde, malgré le fait que la vérification de la corruption en cours d'exécution ne soit plus un échec. Cela signifie que d'autres données doivent être stockées quelque part.

1 votes

Pouvez-vous vérifier votre system.log dans Console.app pour voir si vous avez des messages concernant le disque de Time Machine ? Recherchez des erreurs de lecture/écriture, des erreurs d'E/S, des erreurs HFS, etc. Il se peut que des détails supplémentaires soient répertoriés dans le journal.

0 votes

@jksoegaard J'ai déjà essayé les journaux et il n'y a aucun signe d'erreurs; juste une sauvegarde réussie à 15h, puis à 16h il vérifie la "corruption en temps d'exécution" et décide de ne plus jamais sauvegarder. Comme je l'ai dit, j'ai vérifié l'image du disque, et vérifié la dernière sauvegarde (j'ai également vérifié la plupart des grands fichiers avec une somme de contrôle), et il n'y a aucun signe de corruption. Ce dont j'ai besoin c'est de savoir comment outrepasser la vérification de "corruption en temps d'exécution" car je ne fais pas confiance à sa précision et je ne veux pas de son comportement de secours (tout supprimer).

0 votes

Le fsck_hfs -q lit probablement un état pour montrer que ce volume avait été marqué comme suspect précédemment ou si la vérification actuelle a détecté une corruption. Si un simple montage non nettoyé tuait les sauvegardes, nous aurions 100 tickets chaque matin avec Time Machine toujours cassé - dans un laboratoire, nous avons travaillé dessus à plusieurs reprises et la seule implémentation qui semble plus fragile est le réseau. Utilisez un disque attaché directement si vous ne pouvez pas vous permettre de perdre un ensemble de sauvegardes serait mon conseil principal, mais ce n'est pas vraiment ce qui est demandé ici. Je verrai s'il y a une question différente couvrant cela et je mettrai un lien ici si j'en trouve une.

6voto

Haravikk Points 1128

J'ai maintenant découvert une solution complète en suivant (prudemment) ces étapes :

  1. Désactivez les sauvegardes automatiques de Time Machine dans le panneau de préférences de Time Machine (pour éviter tout conflit).
  2. Montez d'abord le volume réseau vers lequel Time Machine effectue la sauvegarde, la procédure à suivre dépendra de votre système, il devrait y avoir une image disque à l'intérieur portant le nom de votre ordinateur (par exemple, pour un système nommé "Mac Mini de Haravikk" vous trouverez "Mac Mini de Haravikk.sparsebundle")
  3. Attachez l'image en utilisant la commande suivante dans Terminal.app : hdiutil attach -readwrite -nomount /chemin/vers/image (vous pouvez remplir le chemin en le faisant glisser sur une fenêtre de terminal depuis le Finder, assurez-vous juste qu'il y a un espace après -nomount).
  4. Notez les numéros de périphérique retournés, l'un d'entre eux sera votre volume de sauvegarde, généralement le dernier sous la forme de diskNs2N correspond au numéro de disque, et le s2 devrait être la partition.
  5. Exécutez la commande suivante, en prenant soin d'ajouter r au début du numéro de périphérique pour se connecter au périphérique "brut" (non mis en mémoire tampon) : fsck_hfs -p /dev/rdiskNs2
  6. Attendez que la vérification se termine ; s'il trouve des erreurs, il devrait essayer de les réparer puis exécuter à nouveau automatiquement, attendez que le processus se termine. S'il signale qu'il y a des erreurs qui ne peuvent pas être réparées, vous devriez envisager de supprimer les sauvegardes comme recommandé, ou exécutez à nouveau la commande avec -f au lieu de -p (bien que ce ne soit pas recommandé).
  7. À ce stade, vous devriez vraiment vérifier que votre dernière sauvegarde n'est pas corrompue ; vous pouvez le faire visuellement en montant l'image (diskutil mount diskNs2 en substituant si nécessaire) et en examinant dans le Finder. Une comparaison plus détaillée est cependant recommandée mais au-delà de la portée de cette réponse.
  8. Détachez l'image disque avec la commande suivante (en substituant l'ID du disque) : hdiutil detach diskN (si vous avez monté l'image ci-dessus, "éjectez-la" d'abord).
  9. Dans le Finder, ouvrez le dossier avec votre image disque de sauvegarde, faites un clic droit dessus et choisissez "Afficher le contenu". À l'intérieur, vous trouverez un fichier appelé com.apple.TimeMachine.MachineID.plist, ouvrez-le. Si vous avez Xcode installé, il s'ouvrira dedans, sinon vous devriez pouvoir l'ouvrir dans TextEdit ; en modifiant dans TextEdit vous devrez avoir une certaine familiarité avec XML et les fichiers plist, bien qu'ils soient assez simples.
  10. Trouvez la clé VerificationState et changez sa valeur en 1 (elle sera probablement réglée sur 2 si vous rencontrez le même problème que moi).
  11. Trouvez la clé RecoveryBackupDeclinedDate et supprimez-la, si vous utilisez TextEdit assurez-vous également de supprimer sa valeur .
  12. Enregistrez vos modifications, démontez le volume réseau et réactivez les sauvegardes automatiques de Time Machine.
  13. Attendez la prochaine sauvegarde, ou lancez-en une immédiatement ; si votre destination réseau n'est pas votre seul périphérique de sauvegarde, vous pouvez déclencher une sauvegarde vers celui-ci dans le panneau de préférences de Time Machine en faisant un clic droit sur l'icône de la destination et en choisissant "Sauvegarder maintenant".

Détails

Il semble que la vérification de "corruption en cours d'exécution" de Time Machine est un appel à un fsck_hfs -q, qui vérifie si un volume a été démonté de manière incorrecte. Si cela échoue, le volume aura un bit "incohérent" qui peut uniquement être effacé en le réparant avec succès en utilisant fsck_hfs -p ou similaire.

Cependant, en plus de cela, Time Machine stocke un statut de "corruption" dans son com.apple.TimeMachine.MachineID.plist au sein du paquet d'image disque. Je m'en veux de ne pas avoir trouvé cela plus tôt car c'est juste là, juste à l'intérieur. Je ne suis pas sûr si Time Machine effectue d'autres vérifications, il y a une clé liée à une sorte de vérification étendue, mais je ne suis pas sûr de ce que cela implique exactement.

La correction des deux éléments rétablit l'image à un statut "normal", permettant à Time Machine de fonctionner sans problème.

REMARQUE : Bien que dans mon cas la vérification de "corruption en cours d'exécution" était certainement erronée, il est important que vous vérifiez s'il y a une corruption réelle pour s'assurer que c'est bien le cas. Cela dépasse un peu la portée de cette réponse pour couvrir cela également, mais si quelqu'un souhaite recommander des outils ou des guides pour le faire, veuillez commenter !

Supplément

J'ai finalement trouvé ces solutions par moi-même malgré avoir essayé d'obtenir de l'aide des ingénieurs d'Apple ; ils ont juste gaspillé mon temps à chercher des moyens de me blâmer pour la faute, au lieu de me dire ce dont j'avais besoin de savoir, et ils ont fini par clore mon rapport de bogue malgré que je leur aie montré exactement comment j'ai vérifié qu'aucune corruption ne s'était produite !

Très, très déçu de la façon dont Apple a géré un rapport selon lequel leur outil de sauvegarde phare pourrait supprimer inutilement les sauvegardes des utilisateurs. Je considère sérieusement de me passer entièrement de Time Machine la prochaine fois que je mettrai à niveau mon stockage, car je n'ai plus confiance en lui, ni en les ingénieurs qui y travaillent, et je pourrais opter pour quelque chose basé sur ZFS send par excès de précaution.

1voto

miguel_rdp Points 11

Après avoir suivi les instructions, je n'ai pas pu exécuter fsck_hfs car je manquais d'autorisations, même en tant que root. Le fsck ne s'est exécuté qu'après avoir changé les autorisations du sparsebundle et l'avoir monté en lecture-écriture

chflags -R nouchg /Volumes/xyz.sparsebundle
hdiutil attach -nomount -readwrite /Volumes/xyz.sparsebundle

-2voto

Rick Okkersen Points 3

J'ai eu cela une fois, j'ai supprimé le lecteur des paramètres de Time Machine et je l'ai ajouté à nouveau. Votre système vérifiera alors tout et fera une nouvelle sauvegarde.

2 votes

Vous remarquerez que l'OP demandait spécifiquement comment éviter de recréer la sauvegarde. Vous ne répondez pas à cette question.

0 votes

@MarcWilson Supprimer le disque des préférences de Time Machine, puis le réajouter ne crée pas une nouvelle sauvegarde. Au lieu de cela, il devrait hériter de l'existante et continuer à le sauvegarder.

0 votes

Sauf que celui qui existe déjà était déjà marqué comme corrompu.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X