73 votes

Comment puis-je supprimer des fichiers Time Machine en utilisant la ligne de commande ?

Je veux supprimer certains fichiers/répertoires de ma partition Time Machine à l'aide de la fonction rm mais je n'y parviens pas. Je suis presque sûr que le problème est lié à une sorte de contrôle d'accès étendu aux attributs des fichiers de la sauvegarde, mais je ne sais pas comment les remplacer/désactiver afin d'obtenir des résultats satisfaisants. rm pour travailler. Voici un exemple de l'erreur que je reçois :

% sudo rm -rf Backups.backupdb/MacBook/Latest/MacBook/somedir
rm: Backups.backupdb/MacBook/Latest/MacBook/somedir: Directory not empty
rm: Backups.backupdb/MacBook/Latest/MacBook/somedir/somefile: Operation not permitted

Il y a un certain nombre de raisons pour lesquelles je ne veux pas utiliser l'interface graphique de Time Machine ou le Finder pour cela. Si possible, j'aimerais pouvoir maintenir la protection étendue pour tous les autres fichiers (j'aimerais ne pas les désactiver globalement, à moins de pouvoir les réactiver une fois mon travail terminé).

124voto

Eric W Points 1376

Pour contourner les erreurs "opération non autorisée", utilisez la fonction Filet de sécurité de la machine à remonter le temps Programme "bypass" :

sudo /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass rm -rfv /Volumes/[disk]/Backups.backupdb/[path]

Dans la version 10.8 Mountain Lion, le contournement a été déplacé dans les "aides" :

/System/Library/Extensions/TMSafetyNet.kext/Helpers/bypass

Dans 10.10 Yosemite, le pontage a été déplacé ici :

/System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass

Méfiez-vous de lorsque vous l'utilisez pour supprimer des instantanés spécifiques : étant donné que Time Machine utilise des liens durs, l'utilisation de la fonction rm -r sur les dossiers peut également affecter des instantanés plus anciens et plus récents de la même machine. . (Voir d'autres réponses se référant à tmutil delete pour supprimer en toute sécurité un instantané spécifique). Utilisation de rm de supprimer todo Les instantanés pour une seule machine sont acceptés. Tout comme l'utilisation de rm pour supprimer un fichier spécifique, ce qui supprimera uniquement ce fichier lié en dur du ou des instantanés que vous avez spécifiés, en supposant que le fichier ne se trouve pas dans un répertoire lié en dur, car dans ce cas, vous supprimerez réellement le fichier de todo ces répertoires à lien dur.

29voto

Arne Stenström Points 1740

BLUF (bottom line up-front) :

sudo tmutil delete _snapshot-dir_


Utilisation de sudo [chmod](http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/chmod.1 "chmod(1) Mac OS X manual page") -R -N _folder_ pour supprimer toutes les listes de contrôle d'accès d'une hiérarchie de dossiers ne fonctionne pas sur les fichiers et les dossiers dans le répertoire de Time Machine. Sauvegardes.backupdb en raison de el Filet de sécurité TM et les critères décrits dans cette 318 Tech Journal poste (mais peut-être pas exactement comme décrit).
    (Avant d'apprendre cela en consultant le filet de sécurité mentionné dans la réponse d'Eric W (qui fonctionne), j'avais seulement testé sur un dossier cloné à partir d'un sous-dossier d'une sauvegarde TM, et là chmod travaillé. Mais en essayant chmod sur un dossier dans une sauvegarde TM réelle donne l'erreur "Opération non autorisée").

D'une utilité possible :
    Dans Mac OS 10.7+, il y a une fonction tmutil (que je n'ai pas encore essayé, puisque je suis toujours sous Snow Leopard). Il y a un supprimer verbe, qui, selon la description "peut supprimer les instantanés des sauvegardes qui n'ont pas été faites par, ou ne sont pas réclamées par, la machine actuelle" (où un "instantané" est un dossier daté représentant une seule sauvegarde incrémentielle). Je ne sais pas très bien si cela signifie qu'il s'agit de ne peut pas supprimer les instantanés qui sont fait par ou revendiqué par la machine actuelle.( ?)

14voto

Kent Points 1614

Un avertissement concernant l'utilisation du bypass pour supprimer une ancienne sauvegarde : si la sauvegarde supprimée contient des dossiers qui sont exactement les mêmes dans des sauvegardes antérieures ou ultérieures, alors la commande les fichiers peuvent être supprimés de sauvegardes antérieures ou postérieures également !

Time Machine utilise non seulement des liens en dur pour les fichiers inchangés, mais aussi des liens en dur pour les dossiers dans lesquels aucun fichier n'a été ajouté, modifié ou supprimé. Cela donne quelque chose comme :

/2014-11-06/folder/file1
                  /file2
                  /file3
/2014-11-13/folder/file1 = hard link to file /2014-11-06/folder/file1
                  /file2 (changed; new inode)
                  /file3 = hard link to file /2014-11-06/folder/file3
/2014-11-20/folder/ = hard link to folder /2014-11-13/folder/
/2014-11-27/folder/ = hard link to folder /2014-11-20/folder/

Avec ce qui précède, la suppression de n'importe quel fichier de l'application /2014-11-06/folder/ est bien, et n'affecte que la sauvegarde pour cette date. Le nombre de références de lien dur est réduit, donc le " inode " pour file2 seront supprimés, mais les inodes pour file1 y file3 aura toujours un nombre de référence de 1 à cause des sauvegardes ultérieures. Par conséquent, rm -R /2014-11-06 est bien aussi.

Cependant, la suppression d'un fichier de l'un ou l'autre /2014-11-13/folder/ , /2014-11-20/folder/ o /2014-11-27/folder/ le supprimera effectivement de ces 3 dossiers.

Le problème est que rm -R ne se soucie pas des dossiers à lien dur. Il se contente de récurser dans n'importe quel dossier lié en dur qu'il trouve, supprime audacieusement tous ses fichiers, puis supprime le dossier vide.

Donc : lors de la suppression d'une ancienne sauvegarde, il ne faut pas faire une récursion dans un dossier lié en dur et supprimer son contenu. Au lieu de cela, il faut seulement supprimer le lien dur pour le dossier lui-même. . Donc, plutôt que de rm -R utiliser tmutil delete comme expliqué dans la réponse d'Arne .

Soit dit en passant, il semble que l'OS X unlink commande ne peut pas être utilisé sur les dossiers : "un seul argument, qui ne doit pas être un répertoire, peut être fourni" . L'API d'OS X peut supprimer les dossiers à lien dur, tout comme l'API d'OS X peut supprimer les dossiers à lien dur. GNU Coreutils comme installé en utilisant Homebrew .

Enfin, pour prouver tout ce qui précède, un cas-test (OSX 10.6.8) :

sh-3.2# ls -lFa 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist 
-rw-r--r--@ 2 USERNAME  staff  1551 10 30  2014 2014-11-06-012454/Users/USERNAME/Library/Safari/TopSites.plist
-rw-r--r--@ 2 USERNAME  staff  1551 10 30  2014 2014-11-13-024438/Users/USERNAME/Library/Safari/TopSites.plist
-rw-r--r--@ 2 USERNAME  staff  1551 10 30  2014 2014-11-20-014044/Users/USERNAME/Library/Safari/TopSites.plist
-rw-r--r--@ 2 USERNAME  staff  1551 10 30  2014 2014-11-27-025033/Users/USERNAME/Library/Safari/TopSites.plist

Notez que le nombre de liens pour chaque occurrence est de 2 (deuxième colonne). Supprimons la première occurrence :

sh-3.2# /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass unlink 2014-11-06-012454/Users/USERNAME/Library/Safari/TopSites.plist 

sh-3.2# ls -lFa 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist 
-rw-r--r--@ 1 USERNAME  staff  1551 10 30  2014 2014-11-13-024438/Users/USERNAME/Library/Safari/TopSites.plist
-rw-r--r--@ 1 USERNAME  staff  1551 10 30  2014 2014-11-20-014044/Users/USERNAME/Library/Safari/TopSites.plist
-rw-r--r--@ 1 USERNAME  staff  1551 10 30  2014 2014-11-27-025033/Users/USERNAME/Library/Safari/TopSites.plist

Ainsi, après avoir délié l'un des fichiers, le nombre de liens est tombé à 1 pour chaque occurrence, bien que le fichier soit toujours affiché 3 fois. Aucun problème pour l'instant. Supprimez à nouveau la première occurrence :

sh-3.2# /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass unlink 2014-11-13-024438/Users/USERNAME/Library/Safari/TopSites.plist 

sh-3.2# ls -lFa 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist 
ls: 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist: No such file or directory

Maintenant, ils sont tous partis. Apparemment, le fichier TopSites.plist a été modifié pour la dernière fois le 2014-11-06 et mis en ligne le 2014-11-13, car d'autres fichiers ont été ajoutés, modifiés ou supprimés dans la base de données. Safari dossier. Ensuite, le contenu du dossier Safari n'a pas été modifié dans les deux sauvegardes suivantes, de sorte que le 20 novembre 2014 et le 27 novembre 2014, le dossier Safari était lié à la sauvegarde précédente.

En effet, les 4 dossiers n'utilisent que 2 inodes (première colonne) :

sh-3.2# ls -lFaid 2014-11*/Users/USERNAME/Library/Safari/
648651968 drwxr-xr-x@ 86 USERNAME  staff  2924  9 10 16:06 2014-11-06-012454/Users/USERNAME/Library/Safari//
650804457 drwxr-xr-x@ 86 USERNAME  staff  2924  9 10 16:07 2014-11-13-024438/Users/USERNAME/Library/Safari//
650804457 drwxr-xr-x@ 86 USERNAME  staff  2924  9 10 16:07 2014-11-20-014044/Users/USERNAME/Library/Safari//
650804457 drwxr-xr-x@ 86 USERNAME  staff  2924  9 10 16:07 2014-11-27-025033/Users/USERNAME/Library/Safari//

4voto

Curt Points 316

Time machine fonctionne comme rshapshot. Il crée un arbre de liens durs pour chaque nouvelle sauvegarde. Les liens durs vers des fichiers déjà existants dans une sauvegarde précédente utilisent très peu d'espace supplémentaire. Ce n'est que lorsque le dernier lien dur vers un fichier est supprimé que le fichier est réellement supprimé du système de fichiers.

La suppression d'une sauvegarde individuelle entière ne fera pas de mal. Vous supprimez juste les liens physiques. Aucune autre sauvegarde ne sera affectée. Mais cela peut être accompli via tmutil.

Un scénario dans lequel il peut être nécessaire de contourner la protection est de supprimer un fichier spécifique de toutes les sauvegardes (et la raison pour laquelle je me suis retrouvé sur ce post).

Mon disque de sauvegarde est plein. J'ai un très gros fichier (plusieurs gigaoctets) qui est sauvegardé depuis des mois. Il n'existe qu'une seule copie physique de ce fichier, mais de nombreux instantanés avec des liens directs vers cette copie. Pour me débarrasser réellement de ce fichier, je dois supprimer le lien dur de chaque sauvegarde.

Notez que le numéro d'inode est le même pour tous les liens durs vers le même fichier.

% cd /Volumes/WD\ 500G\ USB/Backups.backupdb/csm-laptop
% ls -li */Macintosh\ HD/Users/csm/vm.img
...
2740350 -rw-r--r--@ 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-005636/Macintosh HD/Users/csm/vm.img
2740350 -rw-r--r--@ 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-015812/Macintosh HD/Users/csm/vm.img
2740350 -rw-r--r--@ 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-030036/Macintosh HD/Users/csm/vm.img
2740350 -rw-r--r--@ 28 csm  staff  42949672960 Feb 17 16:12 2015-05-08-041307/Macintosh HD/Users/csm/vm.img
2740350 -rw-r--r--@ 28 csm  staff  42949672960 Feb 17 16:12 Latest/Macintosh HD/Users/csm/vm.img

(Latest est juste un lien symbolique vers le dernier répertoire daté)

% sudo bypass rm -f */Macintosh\ HD\Users\csm\vm.img

Le fichier est supprimé de toutes les sauvegardes, et l'espace est restitué. Si le fichier a été modifié au fil du temps, chaque sauvegarde aura une copie complète et l'espace retourné sera énorme.

3voto

Ram Points 1010

Note : En raison du "filet de sécurité TM" mentionné par Eric W, cette réponse ne fonctionne pas dans le cas d'une sauvegarde Time Machine, à laquelle la question se rapporte spécifiquement. Mais pour la plupart des autres cas, les informations sur la façon de se débarrasser des ACL sont pertinentes.


Il n'est pas nécessaire d'utiliser des outils ACL copiés d'un ancien système d'exploitation.

Utilice ls -le pour visualiser les ACL et chmod pour les modifier.

Pour plus d'informations, tapez [man chmod](http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/chmod.1.html "chmod(1)") et regardez sous "ACL Manipulation Options" .

La commande permettant de supprimer toutes les ACL d'une hiérarchie de dossiers est la suivante :

chmod -R -N foldername

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X