Chcę usunąć niektóre pliki / katalogi z mojej partycji Time Machine przy użyciu rm , ale nie mogę tego zrobić. Jestem prawie pewien, że problem związany jest z jakimś rozszerzonym atrybutem kontroli dostępu do plików w kopii zapasowej, ale nie wiem, jak je zastąpić / wyłączyć, aby rm działał. Przykładem błędu, który otrzymuję jest:
% 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
Istnieje wiele powodów, dla których nie chcę używać do tego interfejsu graficznego Time Machine ani Findera. Jeśli to możliwe, chciałbym móc zachować rozszerzoną ochronę dla wszystkich innych plików (nie chcę ich wyłączać globalnie, chyba że będę mógł je ponownie włączyć po zakończeniu pracy).
rm -r Backups.backupdb/MacBook/Latest/MacBook/somedir
; jeśli się zgadzasz, to proszę przyjąć odpowiedź Arne?Odpowiedzi:
Aby obejść błędy „niedozwolona operacja”, użyj programu „obejście” Time Machine Safety Net :
W 10.8 Mountain Lion obwodnica została przeniesiona do „Pomocników”:
W 10.10 Yosemite, obwodnica przeniesiona tutaj:
Uważaj, gdy używasz tego do usuwania określonych migawek: ponieważ Time Machine używa twardych linków, używanie
rm -r
w folderach może również wpływać na starsze i nowsze migawki tego samego komputera . (Zobacz inne odpowiedzi dotyczącetmutil delete
bezpiecznego usuwania określonej migawki.) Używanierm
do usuwania wszystkich migawek dla pojedynczego komputera jest jednak w porządku. I tak jest używanyrm
do usuwania określonego pliku, który usunie tylko ten plik połączony z określonej migawki (migawek), zakładając, że plik nie znajduje się w katalogu połączonym, ponieważ wtedy faktycznie usuniesz plik ze wszystkich te twarde linki do katalogów.źródło
sudo ...bypass rm -rf /Volumes/...
rm
proces ich nie rozumie i będzie podążał za tymi linkami i usuwał z nich pliki. Oznacza to, że możesz potencjalnie usunąć pliki, które również znajdują się w starszych i nowszych kopiach zapasowych niż ten, który wybrałeś, potencjalnie powodując nieodwracalne uszkodzenie kopii zapasowych. Zalecenia Arne Stenströmtmutil
są zdecydowanie najlepszym rozwiązaniem.rm
do plików z linkami jest w porządku, ale w przypadku folderów z linkami nie jest. Odpowiedź Kenta wymienia ten sam problem. A w Co to jest polecenie Uniksa, aby utworzyć dowiązanie twarde do katalogu w OS X? w 2010 roku ktoś napisał dla 10.5: „Usuwanie to inna historia: jeśli zajdziesz do tego zwykłym sposobem usuwania katalogów, usuniesz zawartość. Więc musisz„ odłączyć ”katalog:unlink new_hard_link
”. Dlatego używaj tego tylko do usuwania wszystkich kopii zapasowych (migawek) dla danego komputera.BLUF (dolna linia z góry):
Korzystanie usunąć wszystkie listy ACL od hierarchii folderów nie działa na plikach i folderach w programie Time Machine Backups.backupdb , ze względu na TM siatka bezpieczeństwa mechanizmu i kryteria opisane w tym 318 Tech Journal postu (ale być może nie dokładnie tak, jak to opisano) . (Przed zapoznaniem się z tym, patrząc na siatkę bezpieczeństwa wspomnianą w odpowiedzi Erica W. (która działa), testowałem tylko folder sklonowany z podfolderu kopii zapasowej TM i tam chmod działał. Ale próba chmod na folderze w rzeczywistym Kopia zapasowa TM wyświetla błąd „Operacja niedozwolona”).
sudo chmod -R -N folder
Możliwe zastosowanie: w
systemie Mac OS 10.7+ istnieje polecenie tmutil (którego nie próbowałem, ponieważ wciąż korzystam z systemu Snow Leopard). Ma czasownik usuwający , który zgodnie z opisem „może usuwać migawki z kopii zapasowych, które nie zostały utworzone przez bieżącą maszynę lub nie są przez nią zgłaszane” (gdzie „migawka” jest datowanym folderem reprezentującym pojedynczą przyrostową kopię zapasową). To nie jest dla mnie jasne, czy oznacza to, że nie można usunąć migawek, które są dokonywane przez lub zgłaszanych przez obecnego urządzenia. (?)
źródło
tmutil delete /Volumes/DISK/Backups.backupdb/HOST/DATE_FOLDER
). Nadal jednak potrzebujesz obejścia Erica, aby usunąć sam folder „Backups.backupdb”.sudo tmutil delete <snapshot-dir>
. Popularnabypass rm
odpowiedź jest nieaktualna.tmutil
do usunięcia tylko niektórych plików z migawki? Nie działało to dla mnie (Invalid deletion target (error 22)
), więcbypass
zamiast tego poszedłem .Backups.backupdb
katalogu, którego nie widzę na dysku z kopią zapasową (Time Capsule). Po prostu mam rzeczy w formieMachineName.sparsebundle
. Czy format się zmienił? Próbuję użyć polecenia usuwania kopii zapasowej TM, ale utknęło na pasku postępu 99,99% na kilka godzin.Ostrzeżenie o użyciu
bypass
polecenia do usunięcia starej kopii zapasowej: jeśli usunięta kopia zapasowa zawiera foldery, które są dokładnie takie same we wcześniejszych lub późniejszych kopiach zapasowych, wówczas pliki mogą zostać usunięte również z wcześniejszych lub późniejszych kopii zapasowych !Time Machine nie tylko używa twardych linków do niezmienionych plików, ale także używa twardych linków do folderów, w których żadne pliki nie zostały dodane, zmienione lub w ogóle usunięte. Powoduje to coś takiego:
W związku z powyższym usunięcie dowolnego pliku
/2014-11-06/folder/
jest prawidłowe i wpływa tylko na kopię zapasową dla tej daty. Liczba odwołań do twardego łącza jest zmniejszona, więc „i- węzeł ” dlafile2
zostanie usunięty, ale dlafile1
i- węzłów liczba odniesień ifile3
nadal będzie wynosić 1 z powodu późniejszych kopii zapasowych. Dlatego teżrm -R /2014-11-06
jest w porządku.Jednak usunięcie dowolnego pliku z albo
/2014-11-13/folder/
,/2014-11-20/folder/
albo/2014-11-27/folder/
skutecznie usunąć go ze wszystkich tych 3 folderach.Problem polega na tym,
rm -R
że nie dba o foldery na stałe. Po prostu rekursuje w dowolnym znalezionym folderze, odważnie usuwa wszystkie swoje pliki, a następnie usuwa pusty folder.Tak więc: usuwając starą kopię zapasową, nie należy ponownie zapisywać jej w folderze połączonym na stałe i usuwać jej zawartość. Zamiast tego należy usunąć tylko twardy link do samego folderu . Więc zamiast
rm -R
używać,tmutil delete
jak wyjaśniono w odpowiedzi Arne .Tak na marginesie, wydaje się, że OS X
unlink
komenda nie może być stosowany na foldery : „tylko jeden argument, który nie może być katalogiem, mogą być dostarczane” . Interfejs API OS X może usuwać foldery na stałe , podobnie jak GNU Coreutils , na przykład instalowane przy użyciu Homebrew .Wreszcie, aby udowodnić wszystkie powyższe, przypadek testowy (OSX 10.6.8):
Zauważ, że liczba linków dla każdego wystąpienia wynosi 2 (druga kolumna). Usuńmy pierwsze wystąpienie:
Po odłączeniu jednego z plików liczba łączy spadła do 1 dla każdego wystąpienia, chociaż plik jest nadal wyświetlany 3 razy. Jeszcze żadnych problemów. Usuń pierwsze wystąpienie ponownie:
Teraz wszystko zniknęło. Najwyraźniej plik
TopSites.plist
został ostatnio zmieniony 2014-11-06 i połączony na twardo w dniu 13.11.2014, ponieważ niektóre inne pliki zostały dodane, zmienione lub usunięte wSafari
folderze. Następnie zawartośćSafari
folderu nie zmieniła się w dwóch kolejnych kopiach zapasowych, więc w dniach 2014-11-20 i 2014-11-27Safari
folder został na stałe połączony z poprzednią kopią zapasową.Rzeczywiście, 4 foldery używają tylko 2 i-węzłów (pierwsza kolumna):
źródło
touch file1; ln file1 file2; ln file2 file3; ls -li; rm file2; ls -li
usunie tylko jeden twardy link. Ale w przypadku folderów w Co to jest polecenie systemu Unix, aby utworzyć dowiązanie twarde do katalogu w OS X? w 2010 roku ktoś napisał dla 10.5: „Usuwanie to inna historia: jeśli zajdziesz do tego zwykłym sposobem usuwania katalogów, usuniesz zawartość. Więc musisz „ odłączyć ”katalog:unlink new_hard_link
”. Jest to prawdopodobnie nadal aktualne.unlink
(w 10.6.8) mówi, że nie może być stosowany na katalogach:When the utility is called as unlink, only one argument, which must not be a directory, may be supplied
.[bypass] rm -r
w połączonych katalogach. (Ale nie muszę ci tego tłumaczyć.)bypass unlink FILE
ma takie same (niezamierzone?) Konsekwencje jakbypass rm FILE
. Identyczny PLIK jest usuwany ze wszystkich kopii zapasowych, a nie tylko z jednej określonej lokalizacji. Iunlink
NIE bierze katalogu lub więcej niż jednego pliku jako argumentu (serwer 10.6.8; ale nie sądzę, aby zmieniło się to w nowszych wersjach systemu operacyjnego)bypass rm FILE
ibypass unlink FILE
usuwając wszystkie identyczne pliki, które nie pasują do tego, co widzi zatouch file1; ln file1 file2; ln file2 file3; ls -li; unlink file2; ls -li
, ani zatouch file1; ln file1 file2; ln file2 file3; ls -li; /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass unlink file2; ls -li
. Nigdy nie usunę niczego z kopii zapasowej ...Uwaga: Ze względu na „sieć bezpieczeństwa TM” wspomnianą przez Erica W, ta odpowiedź nie działa w przypadku kopii zapasowej Time Machine, której pytanie konkretnie dotyczy. Ale w większości pozostałych przypadków informacja o tym, jak pozbyć się list ACL, jest istotna.
Nie ma potrzeby używania narzędzi ACL skopiowanych ze starszego systemu operacyjnego.
Służy
ls -le
do przeglądania list ACL ichmod
ich modyfikowania.Aby uzyskać więcej informacji, wpisz
man chmod
i zajrzyj do „Opcje manipulacji ACL”.Polecenie usunięcia wszystkich list ACL z hierarchii folderów to:
źródło
Wehikuł czasu działa jak rshapshot. Tworzy drzewo twardych linków dla każdej nowej kopii zapasowej. Twarde linki do plików już istniejących w poprzedniej kopii zapasowej zajmują bardzo mało dodatkowego miejsca. Dopiero po usunięciu ostatniego twardego łącza do pliku plik jest faktycznie usuwany z systemu plików.
Usunięcie całej pojedynczej kopii zapasowej nie zaszkodzi. Usuwasz tylko twarde linki. Nie wpłynie to na żadną inną kopię zapasową. Ale można to osiągnąć za pomocą tmutil.
Jednym ze scenariuszy, w których może być konieczne obejście ochrony, jest usunięcie określonego pliku ze wszystkich kopii zapasowych (i powód, dla którego skończyłem na tym poście).
Mój dysk z kopią zapasową jest pełny. Mam bardzo duży plik (wiele gigabajtów), którego kopię zapasową tworzy się od miesięcy. Jest jedna fizyczna kopia, ale wiele migawek z twardymi linkami do tej kopii. Aby faktycznie pozbyć się tego pliku, muszę usunąć twardy link z każdej kopii zapasowej.
Zauważ, że numer i-węzła jest taki sam dla wszystkich twardych łączy do tego samego pliku.
(Najnowsze to tylko dowiązanie symboliczne do ostatnio datowanego katalogu)
Plik jest usuwany ze wszystkich kopii zapasowych i zwracane jest miejsce. Jeśli plik zmienia się w czasie, każda kopia zapasowa będzie miała pełną kopię, a zwrócone miejsce będzie ogromne.
źródło
rm -r
może być (lub: były) niebezpieczne. Lepiej bądź bezpieczny niż żałuj i używajtmutil
do tego.Jeśli nie wykonujesz polecenia jako użytkownik, który jest „właścicielem” kopii zapasowej, będziesz miał trudności z usunięciem z wiersza polecenia. Właśnie miałem ten problem z migracją i musieliśmy zrobić całą kopię zapasową Time Machine (1tb +) i sformatować dysk, zanim uzyskamy jakikolwiek dostęp do niego - i zaufaj mi, próbowałem wszystkiego, aby zastąpić uprawnienia.
źródło
chattr
). To, co teoretycznie da ci root, to obejście dowolnej sieci bezpieczeństwa.Jeśli chcesz usunąć wszystkie pliki w folderze, a nie tylko określone pliki, możesz to zrobić, dodając folder do listy wykluczeń Time Machine. (Preferencje systemowe -> Wehikuł czasu -> Opcje. Przeciągnij folder tutaj.)
Następnym razem, gdy wykonasz kopię zapasową, kopie tego folderu zostaną usunięte z poprzednich kopii zapasowych.
Teraz, jeśli naprawdę chcesz to zrobić z poziomu interfejsu wiersza polecenia, istnieje sposób, choć trochę kłopotliwy.
plutil -convert xml1 com.apple.TimeMachine.plist
aby przekonwertować go z postaci binarnej.
<string>/Path/To/Exclude</string>
plutil -convert binary1 com.apple.TimeMachine.plist
/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper -auto
Edycja: Po wykonaniu kroku 9 wszystkie kopie nowo wykluczonego folderu zostaną usunięte z poprzednich kopii zapasowych.
Aby usunąć wyjątek, skopiuj kopię zapasową z powrotem do / Library / Preferences.
źródło
su - root
, a następnierm -rf
foldery, ale myślę, błahy z czegoś tak cennego jak tworzenie kopii zapasowych w ten sposób jest coś trzeba z reguły starają się unikać.sudo
ma taki sam efekt jaksu - root
na komputerze Mac. Wydaje mi się, że pamiętam okazję, kiedy próbowałem usunąć coś, cosudo
nie wystarczyło, alesudo - root
załatwiło sprawę.Możesz tworzyć
ls
rozszerzone atrybuty listy w długim widoku za pomocą-@
flagi. Wyświetli listę ACL po dostarczeniu-e
flagi. Dzięki temu możesz dowiedzieć się, z czym masz do czynienials -lea@ DIR
.Sądząc z moich lokalnych kopii zapasowych Time Machine, wygląda na to, że Time Machine stosuje rozszerzone atrybuty z metadanymi o najnowszych i najstarszych migawkach. Dane przechowywane przez xattrs wydają się być listą binarną. Te wydają się niewinne.
Time Machine chce także zastosować listy ACL do niektórych katalogów, o których wie, takich jak te umieszczone w standardowym katalogu użytkownika. Istnieją dwa rodzaje list ACL, które potencjalnie stoją na twojej drodze: te stosowane bezpośrednio do pliku lub katalogu, które odmawiają usunięcia, oraz te stosowane do elementu nadrzędnego pliku, który odmawia delete_child.
Niestety, Mac OS X nie dostarcza narzędzi użytkownika
getfacl
isetfacl
określona przez POSIX.2c przeglądanie i manipulowanie ACL. Aby zadzierać z listami ACL, trzeba będzie trochę zaprogramować; zobacz stronęacl(3)
podręcznika.źródło