Ich möchte mit rm einige Dateien / Verzeichnisse von meiner Time Machine Partition löschen , kann dies jedoch nicht. Ich bin mir ziemlich sicher, dass das Problem mit einer Art von erweiterten Zugriffssteuerungsattributen für Dateien in der Sicherung zusammenhängt, aber ich weiß nicht, wie ich sie überschreiben / deaktivieren soll, damit rm funktioniert. Ein Beispiel für den Fehler, den ich erhalte, ist:
% 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
Es gibt eine Reihe von Gründen, aus denen ich weder die Time Machine-GUI noch den Finder verwenden möchte. Wenn möglich, möchte ich den erweiterten Schutz für alle anderen Dateien beibehalten (ich möchte sie nicht global deaktivieren, es sei denn, ich kann sie nach Abschluss meiner Arbeit wieder aktivieren).
rm -r Backups.backupdb/MacBook/Latest/MacBook/somedir
. Wenn Sie einverstanden sind, akzeptieren Sie bitte Arnes Antwort.Antworten:
Verwenden Sie das Time Machine Safety Net "Bypass" Programm, um "Operation not allowed" Fehler umzugehen :
In 10.8 Mountain Lion wurde die Umgehungsstraße in "Helpers" verschoben:
In 10.10 Yosemite wurde die Umgehungsstraße hierher verschoben:
Beachten Sie beim Löschen bestimmter Snapshots Folgendes: Da Time Machine feste Verknüpfungen verwendet, wirkt sich die Verwendung
rm -r
von Ordnern möglicherweise auch auf ältere und neuere Snapshots desselben Computers aus . (Weitere Antwortentmutil delete
zum sicheren Löschen eines bestimmten Snapshots finden Sie unter.) Dasrm
Löschen aller Snapshots für einen einzelnen Computer ist jedoch in Ordnung. Dies wird verwendetrm
, um eine bestimmte Datei zu löschen. Dabei wird nur die fest verknüpfte Datei aus den von Ihnen angegebenen Snapshots entfernt, vorausgesetzt, die Datei befindet sich nicht in einem fest verknüpften Verzeichnis, da Sie die Datei dann tatsächlich aus allen entfernen würden diese fest verbundenen Verzeichnisse.quelle
sudo ...bypass rm -rf /Volumes/...
rm
Prozess versteht diese jedoch nicht und folgt diesen Links und entfernt Dateien von ihnen. Dies bedeutet, dass Sie möglicherweise Dateien löschen können, die sich auch in älteren und neueren Sicherungen als der von Ihnen ausgewählten befinden, was zu irreparablen Schäden an den Sicherungen führen kann. Die Empfehlung von Arne Stenström zur Verwendungtmutil
ist bei weitem die überlegene Lösung.rm
für fest verknüpfte Dateien ist in Ordnung, für fest verknüpfte Ordner jedoch nicht. Kents Antwort erwähnt dasselbe Problem. Und in Was ist der Unix-Befehl zum Erstellen eines Hardlinks zu einem Verzeichnis in OS X? 2010 schrieb jemand für 10.5: "Löschen ist eine andere Geschichte: Wenn Sie wie gewohnt Verzeichnisse löschen, löschen Sie den Inhalt. Sie müssen also die Verknüpfung des Verzeichnisses aufheben:unlink new_hard_link
". Verwenden Sie diese Option also nur, um alle Sicherungen (Snapshots) für einen bestimmten Computer zu löschen .BLUF (unterste Zeile oben):
Verwenden Sie alle ACLs aus einer Ordnerhierarchie entfernen funktioniert nicht auf die Dateien und Ordner in Time Machine Backups.backupdb , wegen des TM Safety Net - Mechanismus und die in dieser beschriebenen Kriterien 318 Tech Journal Post (aber möglicherweise nicht genau , wie beschrieben) . (Bevor ich dies durch das Nachschlagen des in Eric Ws Antwort erwähnten Sicherheitsnetzes erfuhr (was funktioniert), hatte ich nur einen Ordner getestet, der aus einem Unterordner eines TM-Backups geklont wurde, und dort funktionierte chmod . Aber ich habe versucht, chmod für einen Ordner in einem tatsächlichen zu verwenden.) TM-Backup gibt den Fehler "Vorgang nicht zulässig" aus.)
sudo chmod -R -N folder
Mögliche Verwendung:
Unter Mac OS 10.7+ gibt es einen tmutil- Befehl (den ich nicht ausprobiert habe, da ich immer noch auf Snow Leopard bin). Es hat ein Löschverb , das gemäß der Beschreibung "Snapshots von Backups löschen kann, die nicht vom aktuellen Computer erstellt wurden oder von diesem nicht beansprucht werden" (wobei ein "Snapshot" ein datierter Ordner ist, der ein einzelnes inkrementelles Backup darstellt). Es ist mir nicht klar, ob dies bedeutet, dass keine Snapshots gelöscht werden können, die vom aktuellen Computer erstellt oder von diesem beansprucht werden. (?)
quelle
tmutil delete /Volumes/DISK/Backups.backupdb/HOST/DATE_FOLDER
). Sie benötigen jedoch noch Erics Bypass-Trick, um den Ordner "Backups.backupdb" selbst zu löschen.sudo tmutil delete <snapshot-dir>
. Die beliebtebypass rm
Antwort ist veraltet.tmutil
nur einige Dateien aus einem Schnappschuss zu löschen? Es hat bei mir nicht geklappt (Invalid deletion target (error 22)
), also bin ichbypass
stattdessen mitgegangen.Backups.backupdb
Verzeichnis, das sich nicht auf meinem Sicherungslaufwerk befindet (eine Time Capsule). Ich habe nur Dinge von der FormMachineName.sparsebundle
. Hat sich das Format geändert? Ich versuche, den Befehl zum Löschen von Sicherungen von TM zu verwenden, aber der 99,99% -Fortschrittsbalken bleibt mehrere Stunden lang hängen.Eine Warnung zur Verwendung des
bypass
Befehls zum Entfernen einer alten Sicherung: Wenn die gelöschte Sicherung Ordner enthält, die in früheren oder späteren Sicherungen identisch sind, werden möglicherweise auch Dateien aus früheren oder späteren Sicherungen gelöscht !Time Machine verwendet nicht nur Hardlinks für unveränderte Dateien, sondern auch Hardlinks für Ordner, in denen überhaupt keine Dateien hinzugefügt, geändert oder gelöscht wurden. Dies führt zu etwas wie:
Mit den oben genannten Einstellungen ist das Löschen von Dateien
/2014-11-06/folder/
in Ordnung und wirkt sich nur auf die Sicherung für dieses Datum aus. Die Anzahl der Hardlink-Verweise wird verringert, sodass der " Inode " fürfile2
entfernt wird, aber die Inodes fürfile1
undfile3
haben aufgrund der späteren Sicherungen immer noch einen Verweiszähler von 1. Daherrm -R /2014-11-06
ist auch in Ordnung.Allerdings, das Entfernen einer Datei von entweder
/2014-11-13/folder/
,/2014-11-20/folder/
oder/2014-11-27/folder/
effektiv es aus all diesen drei Ordnern entfernen.Das Problem ist, dass
rm -R
es nicht um fest verbundene Ordner geht. Es kehrt nur in einen fest verknüpften Ordner zurück, löscht kühn alle seine Dateien und entfernt dann den leeren Ordner.Also: Wenn Sie ein altes Backup entfernen, sollten Sie nicht in einen fest verknüpften Ordner zurückkehren und dessen Inhalt löschen. Stattdessen sollte man nur den Hardlink für den Ordner selbst entfernen . Also, anstatt
rm -R
zu verwenden ,tmutil delete
wie erklärt in Arnes Antwort .Als Nebenwirkung , so scheint es , dass die OS X -
unlink
Befehl nicht auf Ordner verwendet werden kann : „nur ein Argument, das nicht ein Verzeichnis sein muss, zugeführt werden kann“ . Die OS X-API kann fest verknüpfte Ordner entfernen , ebenso wie GNU Coreutils , wie sie mit Homebrew installiert wurden .Um all das zu beweisen, ein Testfall (OSX 10.6.8):
Beachten Sie, dass die Anzahl der Links für jedes Vorkommen 2 beträgt (zweite Spalte). Entfernen wir das erste Vorkommen:
Nach dem Aufheben der Verknüpfung einer der Dateien ist die Anzahl der Verknüpfungen bei jedem Auftreten auf 1 gesunken, obwohl die Datei immer noch dreimal angezeigt wird. Noch keine Probleme. Entfernen Sie das erste Vorkommen erneut:
Jetzt sind alle weg. Anscheinend wurde die Datei
TopSites.plist
zuletzt am 06.11.2014 geändert und am 13.11.2014 fest verlinkt, da dann einige andere Dateien zumSafari
Ordner hinzugefügt, geändert oder daraus entfernt wurden . Als Nächstes wurde der Inhalt desSafari
Ordners in den folgenden beiden Sicherungen nicht geändert, sodass derSafari
Ordner am 20.11.2014 und am 27.11.2014 fest mit der vorherigen Sicherung verknüpft war.In der Tat verwenden die 4 Ordner nur 2 Inodes (erste Spalte):
quelle
touch file1; ln file1 file2; ln file2 file3; ls -li; rm file2; ls -li
mir : Entfernt nur einen einzigen festen Link. Aber für Ordner , in Was ist der Unix - Befehl eine Verknüpfung zu einem Verzeichnis in OS X zu erstellen? 2010 schrieb jemand für 10.5: "Löschen ist eine andere Geschichte: Wenn Sie wie gewohnt Verzeichnisse löschen, löschen Sie den Inhalt. Sie müssen also die Verknüpfung des Verzeichnisses aufheben:unlink new_hard_link
". Dies ist wahrscheinlich noch gültig.unlink
(in 10.6.8) sagt , dass es nicht auf Verzeichnisse verwendet werden kann:When the utility is called as unlink, only one argument, which must not be a directory, may be supplied
.[bypass] rm -r
für fest verknüpfte Verzeichnisse. (Aber ich muss Ihnen das nicht erklären.)bypass unlink FILE
hat die gleiche (unbeabsichtigte?) Konsequenz wiebypass rm FILE
. Die identische DATEI wird aus allen Sicherungen entfernt, nicht nur aus dem angegebenen Speicherort. Undunlink
wird NICHT ein Verzeichnis oder mehr als eine Datei als Argument nehmen (10.6.8 Server; aber ich glaube nicht, dass sich dies durch die neueren Betriebssystemversionen geändert hat)bypass rm FILE
undbypass unlink FILE
Entfernen aller identischen Dateien, die nicht übereinstimmt , was man sieht fürtouch file1; ln file1 file2; ln file2 file3; ls -li; unlink file2; ls -li
, noch fürtouch file1; ln file1 file2; ln file2 file3; ls -li; /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass unlink file2; ls -li
. Ich werde niemals etwas aus einem Backup entfernen ...Hinweis: Aufgrund des von Eric W erwähnten "TM-Sicherheitsnetzes" funktioniert diese Antwort nicht für den Fall einer Time Machine-Sicherung, auf die sich die Frage speziell bezieht. Für die meisten anderen Fälle sind jedoch die Informationen zum Entfernen von ACLs relevant.
Es ist nicht erforderlich, ACL-Tools zu verwenden, die von einem älteren Betriebssystem kopiert wurden.
Verwenden Sie
ls -le
diese Optionchmod
, um ACLs anzuzeigen und zu ändern.Weitere Informationen finden Sie
man chmod
unter "ACL-Manipulationsoptionen".Der Befehl zum Entfernen aller ACLs aus einer Ordnerhierarchie lautet:
quelle
Zeitmaschine funktioniert wie Rshapshot. Für jedes neue Backup wird ein Baum fester Links erstellt. Feste Links zu Dateien, die bereits in einer früheren Sicherung vorhanden waren, belegen nur sehr wenig zusätzlichen Speicherplatz. Erst wenn der letzte feste Link zu einer Datei entfernt wird, wird die Datei tatsächlich aus dem Dateisystem gelöscht.
Das Entfernen eines gesamten einzelnen Backups schadet nicht. Sie entfernen nur harte Links. Keine andere Sicherung ist betroffen. Dies kann aber über tmutil erreicht werden.
Ein Szenario, in dem der Schutz möglicherweise umgangen werden muss, ist das Entfernen einer bestimmten Datei aus allen Sicherungen (und der Grund, warum ich in diesem Beitrag gelandet bin).
Meine Sicherungsdiskette ist voll. Ich habe eine sehr große Datei (viele Gigabyte), die seit Monaten gesichert wurde. Es gibt eine physische Kopie davon, aber viele Schnappschüsse mit festen Links zu dieser Kopie. Um diese Datei tatsächlich loszuwerden, muss ich den festen Link aus jeder Sicherung entfernen.
Beachten Sie, dass die Inode-Nummer für alle festen Links zu derselben Datei gleich ist.
(Neueste ist nur ein Symlink zum zuletzt datierten Verzeichnis)
Die Datei wird aus allen Sicherungen entfernt und Speicherplatz wird zurückgegeben. Wenn sich die Datei im Laufe der Zeit geändert hat, verfügt jede Sicherung über eine vollständige Kopie, und der zurückgegebene Speicherplatz ist enorm.
quelle
rm -r
möglicherweise (oder: war) gefährlich. Besser auf Nummer sicher gehen und dafür verwendentmutil
.Wenn Sie den Befehl nicht als Benutzer ausführen, der "Eigentümer" der Sicherung ist, fällt es Ihnen schwer, ihn über die Befehlszeile zu löschen. Ich hatte gerade dieses Problem mit einer Migration, und wir mussten das gesamte Time Machine-Backup (1 TB +) löschen und das Laufwerk formatieren, bevor wir darauf zugreifen konnten - und vertrauen Sie mir, ich habe alles versucht, um die Berechtigungen zu überschreiben.
quelle
chattr
) auf anderen unixoiden Systemen sogar unwahr . Theoretisch bedeutet Root, jedes Sicherheitsnetz zu umgehen .Wenn Sie alle Dateien in einem Ordner und nicht nur bestimmte Dateien löschen möchten, können Sie dies erreichen, indem Sie den Ordner zur Ausschlussliste von Time Machine hinzufügen. (Systemeinstellungen -> Time Machine -> Optionen. Ziehen Sie den Ordner hierher.)
Wenn Sie das nächste Mal eine Sicherung durchführen, werden Kopien dieses Ordners aus früheren Sicherungen entfernt.
Wenn Sie dies wirklich von einer CLI aus tun möchten, gibt es einen, wenn auch etwas umständlichen Weg.
plutil -convert xml1 com.apple.TimeMachine.plist
Sie dies aus, um es von einer binären Form zu konvertieren.
<string>/Path/To/Exclude</string>
plutil -convert binary1 com.apple.TimeMachine.plist
/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper -auto
Bearbeiten: Wenn Sie Schritt 9 ausführen, werden alle Kopien des neu ausgeschlossenen Ordners aus früheren Sicherungen gelöscht.
Um die Ausnahme zu entfernen, kopieren Sie Ihr Backup zurück in / Library / Preferences.
quelle
su - root
und immerrm -rf
die Ordner durchsuchen, aber ich denke, es ist etwas, das man generell vermeiden sollte, wenn man auf diese Weise mit etwas so Kostbarem wie Backups fummelt.sudo
den gleichen Effekt hat wiesu - root
auf einem Mac. Ich erinnere mich an eine Gelegenheit, als ich versuchte, etwas zu löschen,sudo
das nicht ausreichte, abersudo - root
den Trick machte.ls
Mithilfe des-@
Flags können Sie erweiterte Listenattribute in einer langen Ansicht erstellen. Es werden ACLs aufgelistet, wenn Sie das-e
Flag angeben . So können Sie herausfinden, womit Sie es zu tun haben, indem Sie verwendenls -lea@ DIR
.Nach meinen lokalen Time Machine-Backups sieht es so aus, als würde Time Machine erweiterte Attribute mit Metadaten zu den neuesten und ältesten Snapshots anwenden. Die von den xattrs gespeicherten Daten scheinen eine binäre Liste zu sein. Diese scheinen harmlos.
Time Machine versucht außerdem, Zugriffssteuerungslisten auf bestimmte ihm bekannte Verzeichnisse anzuwenden, z. B. auf Verzeichnisse, die sich in einem Standardbenutzerverzeichnis befinden. Möglicherweise stehen Ihnen zwei Arten von Zugriffssteuerungslisten im Weg: die direkt auf die Datei oder das Verzeichnis angewendeten, die das Löschen verweigern, und die übergeordneten Zugriffssteuerungslisten, die das Löschen von Kindern verweigern.
Leider unterstützt Mac OS X Dienstprogramme des Benutzers nicht liefern
getfacl
undsetfacl
spezifiziert durch POSIX.2c ACLs anzuzeigen und zu bearbeiten. Um mit ACLs herumzuspielen, müssen Sie etwas programmieren. Siehe dieacl(3)
Manpage.quelle