Je souhaite supprimer certains fichiers / répertoires de ma partition Time Machine à l'aide de rm , mais je suis incapable de le faire. Je suis presque sûr que le problème est lié à une sorte d'attributs étendus de contrôle d'accès sur les fichiers de la sauvegarde, mais je ne sais pas comment les remplacer / les désactiver pour que rm fonctionne. Un exemple d'erreur que je reçois est:
% 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 existe un certain nombre de raisons pour lesquelles je ne souhaite pas utiliser l'interface graphique de Time Machine ni le Finder à cet effet. Si possible, j'aimerais pouvoir maintenir la protection étendue pour tous les autres fichiers (j'aimerais ne pas les désactiver globalement, à moins que je ne puisse le réactiver une fois mon travail terminé).
rm -r Backups.backupdb/MacBook/Latest/MacBook/somedir
; si vous êtes d'accord, acceptez la réponse d'Arne?Réponses:
Pour contourner les erreurs "opération non autorisée", utilisez le programme "contournement" de Time Machine Safety Net :
Dans 10.8 Mountain Lion, contournement déplacé dans 'Helpers':
Dans 10h10 Yosemite, le contournement s'est déplacé ici:
Faites attention lorsque vous l' utilisez pour supprimer des instantanés spécifiques: étant donné que Time Machine utilise des liens physiques, l'utilisation
rm -r
de dossiers peut également affecter les instantanés anciens et plus récents du même ordinateur . (Voir les autres réponses concernant latmutil delete
suppression en toute sécurité d'un instantané spécifique.) Utiliserrm
pour supprimer tous les instantanés d'un seul ordinateur est cependant correct. Il en va de mêmerm
pour supprimer un fichier spécifique, qui ne supprimera que le fichier lié durement de la ou des capture (s) que vous spécifiez, en supposant que le fichier ne se trouve pas dans un répertoire lié durement, car vous supprimeriez alors le fichier de tous les fichiers. ces répertoires liés.la source
sudo ...bypass rm -rf /Volumes/...
rm
processus ne les comprend pas, suivra ces liens et en supprimera les fichiers. Cela signifie que vous pouvez potentiellement supprimer des fichiers qui se trouvent également dans des sauvegardes plus anciennes et plus récentes que celle que vous avez sélectionnée, ce qui pourrait causer des dommages irréparables à la (aux) sauvegarde (s). La recommandation d'utilisation d'Arne Stenströmtmutil
est de loin la solution supérieure.rm
des fichiers liés durement est acceptable, mais ce n'est pas le cas pour les dossiers liés durement . La réponse de Kent mentionne le même problème. Et dans Qu'est-ce que la commande Unix pour créer un lien physique vers un répertoire sous OS X? Quelqu'un a écrit pour 10.5 en 2010: "La suppression est une histoire différente: si vous vous y prenez comme d'habitude pour supprimer des répertoires, vous en supprimerez le contenu. Vous devez donc" dissocier "le répertoire:unlink new_hard_link
". Vous ne devez donc l'utiliser que pour supprimer toutes les sauvegardes (instantanés) d'une machine donnée.BLUF (ligne du bas à l'avant):
En utilisant pour supprimer tous les ACLs d'une hiérarchie de dossiers ne fonctionne pas sur les fichiers et les dossiers de Time Machine Backups.backupdb , en raison de la TM Safety Net mécanisme et les critères décrits dans le présent 318 Tech Journal post (mais peut - être pas exactement comme décrit) . (Avant d'apprendre cela en cherchant dans le filet de sécurité mentionné dans la réponse d'Eric W (ce qui fonctionne), je n'avais testé que sur un dossier cloné à partir d'un sous-dossier d'une sauvegarde TM, et chmod fonctionnait. Mais essayer chmod sur un dossier dans un fichier réel La sauvegarde TM donne l'erreur "Opération non autorisée".)
sudo chmod -R -N folder
D'utilisation possible:
Sous Mac OS 10.7+, il existe une commande tmutil (que je n'ai pas encore essayée car je suis toujours sur Snow Leopard). Il comporte un verbe de suppression qui, selon la description, "peut supprimer des instantanés de sauvegardes qui n'ont pas été effectuées par la machine actuelle ou ne sont pas revendiqués par celle-ci" (où un "instantané" est un dossier daté représentant une sauvegarde incrémentielle unique). Il n'est pas clair pour moi si cela signifie qu'il ne peut pas supprimer des instantanés qui sont faites par ou revendiqués par la machine actuelle. (?)
la source
tmutil delete /Volumes/DISK/Backups.backupdb/HOST/DATE_FOLDER
). Cependant, vous avez toujours besoin de l'astuce de contournement d'Eric pour supprimer le dossier "Backups.backupdb" lui-même.sudo tmutil delete <snapshot-dir>
. Labypass rm
réponse populaire est obsolète.tmutil
pour supprimer seulement certains fichiers d'un instantané? Cela n'a pas fonctionné pour moi (Invalid deletion target (error 22)
) alors je suis allé avec à labypass
place.Backups.backupdb
répertoire que je ne vois pas sur mon lecteur de sauvegarde (une capsule temporelle). J'ai juste des choses de la formeMachineName.sparsebundle
. Le format a-t-il changé? J'essaie d'utiliser la commande delete backup de TM, mais elle est bloquée sur la barre de progression de 99,99% pendant plusieurs heures.Avertissement concernant l'utilisation de la
bypass
commande pour supprimer une ancienne sauvegarde: si la sauvegarde supprimée contient des dossiers identiques à ceux des sauvegardes précédentes ou ultérieures, les fichiers peuvent également être supprimés des sauvegardes antérieures ou ultérieures !Time Machine utilise non seulement des liens physiques pour les fichiers non modifiés, mais également des liens physiques pour les dossiers dans lesquels aucun fichier n'a été ajouté, modifié ou supprimé. Cela donne quelque chose comme:
Avec ce qui précède, supprimer n'importe quel fichier
/2014-11-06/folder/
est correct et n'affecte que la sauvegarde pour cette date. Le nombre de références de liaisons physiques est réduit, de sorte que "l' inode "file2
sera supprimé, mais les inodes pourfile1
etfile3
auront toujours un nombre de références de 1 en raison des sauvegardes ultérieures. Par conséquent,rm -R /2014-11-06
c'est bien aussi.Cependant, supprimer tout fichier de l’un ou de l’autre
/2014-11-13/folder/
,/2014-11-20/folder/
ou/2014-11-27/folder/
le supprimera effectivement de tous ces 3 dossiers.Le problème est que
rm -R
peu importe les dossiers liés. Il ne fait que récursir dans tous les dossiers durement liés qu'il trouve, efface hardiment tous ses fichiers, puis supprime le dossier vide.Ainsi: lors de la suppression d'une ancienne sauvegarde, il ne faut pas recurse dans un dossier dur et supprimer son contenu. Au lieu de cela, vous ne devez supprimer que le lien physique du dossier lui-même . Donc, plutôt que d'
rm -R
utilisertmutil delete
comme expliqué dans la réponse d'Arne .En passant, il semble que la
unlink
commande OS X ne puisse pas être utilisée sur des dossiers : "un seul argument, qui ne doit pas être un répertoire, peut être fourni" . L'API OS X peut supprimer les dossiers liés de manière rigoureuse, de même que GNU Coreutils , comme s'il était installé avec Homebrew .Enfin, pour prouver tout ce qui précède, un scénario de test (OSX 10.6.8):
Notez que le nombre de liens pour chaque occurrence est 2 (deuxième colonne). Supprimons la première occurrence:
Ainsi, après avoir dissocié l'un des fichiers, le nombre de liens est tombé à 1 pour chaque occurrence, même si le fichier est toujours affiché 3 fois. Pas de problèmes pour le moment. Supprimez à nouveau la première occurrence:
Maintenant tous sont partis. Apparemment, le fichier a
TopSites.plist
été modifié pour la dernière fois le 2014-11-06 et lié en dur le 2014-11-13, à ce moment-là, certains autres fichiers ont été ajoutés, modifiés ou supprimés dans leSafari
dossier. Ensuite, le contenu duSafari
dossier n'a pas changé dans les deux sauvegardes suivantes. Ainsi, les 2014-11-20 et 2014-11-27, leSafari
dossier était lié à la sauvegarde précédente.En effet, les 4 dossiers n’utilisent que 2 inodes (première colonne):
la source
touch file1; ln file1 file2; ln file2 file3; ls -li; rm file2; ls -li
ne supprimera qu'un seul lien dur. Mais pour les dossiers , dans Qu'est-ce que la commande Unix pour créer un lien physique vers un répertoire sous OS X? Quelqu'un a écrit pour 10.5 en 2010: "La suppression est une histoire différente: si vous vous y prenez comme d'habitude pour supprimer des répertoires, vous en supprimerez le contenu. Vous devez donc " dissocier "le répertoire:unlink new_hard_link
". Ceci est probablement toujours valable.unlink
(en 10.6.8) dit qu'il ne peut pas être utilisé sur des répertoires:When the utility is called as unlink, only one argument, which must not be a directory, may be supplied
.[bypass] rm -r
répertoires liés en dur. (Mais je n'ai pas à vous expliquer cela.)bypass unlink FILE
a la même conséquence (involontaire?) Quebypass rm FILE
. Le FICHIER identique est supprimé de toutes les sauvegardes, pas seulement du seul emplacement spécifié. Et,unlink
ne prend PAS un répertoire ou plus d'un fichier comme argument (serveur 10.6.8; mais, je ne pense pas que cela aura changé avec les versions les plus récentes du système d'exploitation)bypass rm FILE
et enbypass unlink FILE
supprimant tous les fichiers identiques, ce qui ne correspond pas à ce que l'on voit pourtouch file1; ln file1 file2; ln file2 file3; ls -li; unlink file2; ls -li
, ni pourtouch file1; ln file1 file2; ln file2 file3; ls -li; /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass unlink file2; ls -li
. Je ne vais jamais retirer quelque chose d'une sauvegarde ...Remarque: 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 dans la plupart des cas, les informations sur la manière de se débarrasser des listes de contrôle d'accès sont pertinentes.
Il n'est pas nécessaire d'utiliser des outils ACL copiés à partir d'un ancien système d'exploitation.
Utilisez
ls -le
pour afficher etchmod
modifier les ACL .Pour plus d’informations, tapez
man chmod
et regardez sous ”Options de manipulation ACL”.La commande permettant de supprimer toutes les listes de contrôle d'accès d'une hiérarchie de dossiers est la suivante:
la source
Time Machine fonctionne comme rshapshot. Il crée une arborescence de liens durs pour chaque nouvelle sauvegarde. Les liens physiques vers des fichiers 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.
Supprimer une sauvegarde individuelle entière ne fera pas de mal. Vous ne faites que supprimer les liens durs. 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 consiste à supprimer un fichier spécifique de toutes les sauvegardes (et la raison pour laquelle je me suis retrouvé dans ce post).
Mon disque de sauvegarde est plein. J'ai un très gros fichier (plusieurs giga-octets) qui a été sauvegardé pendant des mois. Il existe une copie physique de celle-ci, mais de nombreux instantanés avec des liens en dur vers cette copie. Pour réellement supprimer ce fichier, je dois supprimer le lien physique de chaque sauvegarde.
Notez que le numéro d'inode est le même pour tous les liens physiques vers le même fichier.
(Dernier est juste un lien symbolique vers le dernier répertoire daté)
Le fichier est supprimé de toutes les sauvegardes et de l'espace est retourné. Si le fichier a changé au fil du temps, chaque copie de sauvegarde aura une copie complète et l'espace retourné sera énorme.
la source
rm -r
peut être (ou avoir été) dangereux. Mieux vaut prévenir que guérir et utilisertmutil
pour cela.Si vous n'exécutez pas la commande en tant qu'utilisateur "propriétaire" de la sauvegarde, vous aurez du mal à supprimer de la ligne de commande. Je venais de subir ce problème avec une migration et nous devions idem la sauvegarde complète de Time Machine (1 To +) et formater le disque avant de pouvoir obtenir un accès quelconque - et croyez-moi, j'ai tout essayé pour ignorer les autorisations.
la source
chattr
). Ce que root vous donnera théoriquement, c'est de contourner tout filet de sécurité.Si vous souhaitez supprimer tous les fichiers d'un dossier et pas seulement des fichiers spécifiques, vous pouvez le faire en ajoutant le dossier à la liste d'exclusion de Time Machine. (Préférences système -> Time Machine -> Options. Faites glisser le dossier ici.)
La prochaine fois que vous effectuerez une sauvegarde, des copies de ce dossier seront supprimées des sauvegardes précédentes.
Maintenant, si vous voulez vraiment faire cela à partir d'une interface de ligne de commande, il y a un moyen, quoique un peu lourd.
plutil -convert xml1 com.apple.TimeMachine.plist
pour le convertir à partir de la forme binaire.
<string>/Path/To/Exclude</string>
plutil -convert binary1 com.apple.TimeMachine.plist
/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper -auto
Modifier: à l'étape 9, toutes les copies du dossier nouvellement exclu seront effacées des sauvegardes précédentes.
Pour supprimer l'exception, copiez votre sauvegarde dans / Library / Preferences.
la source
su - root
etrm -rf
les dossiers, mais je pense que jouer avec quelque chose d' aussi précieux que les sauvegardes de cette façon est quelque chose qu'on devrait essayer d'éviter en général.sudo
ait le même effet quesu - root
sur un mac. Il me semble me souvenir d’une occasion où j’essayais de supprimer quelque chose oùsudo
cela ne suffisait pas, mais j’aisudo - root
fait le tour.Vous pouvez créer une
ls
liste d'attributs étendus dans une vue longue à l'aide de l'-@
indicateur. Il liste les ACL lorsque vous fournissez le-e
drapeau. Donc, vous pouvez trouver ce que vous avez affaire en utilisantls -lea@ DIR
.À en juger par mes sauvegardes Time Machine locales, il semble que Time Machine applique les attributs étendus avec des métadonnées sur les instantanés les plus récents et les plus anciens. Les données stockées par les xattrs ressemblent à des plist binaires. Celles-ci semblent anodines.
Time Machine cherche également à appliquer des listes de contrôle d'accès à certains répertoires connus, tels que ceux placés dans un répertoire utilisateur standard. Deux types d’ACL se dressent potentiellement sur votre chemin: ceux appliqués directement au fichier ou au répertoire qui refuse la suppression, et ceux appliqués à un parent du fichier qui refuse la commande delete_child.
Malheureusement, Mac OS X ne fournit pas les services utilisateur
getfacl
etsetfacl
spécifié par POSIX.2c pour afficher et manipuler ACLs. Pour jouer avec les ACL, vous devrez faire de la programmation; voir laacl(3)
page de manuel.la source