Я хочу удалить некоторые файлы / каталоги из раздела Time Machine с помощью команды rm , но не могу этого сделать. Я почти уверен, что проблема связана с какими-то расширенными атрибутами контроля доступа к файлам в резервной копии, но я не знаю, как их переопределить / отключить, чтобы заставить работать rm . Пример ошибки, которую я получаю:
% 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
Есть ряд причин, по которым я не хочу использовать ни графический интерфейс Time Machine, ни Finder для этого. Если это возможно, я хотел бы иметь возможность поддерживать расширенную защиту для всех других файлов (я бы не хотел отключать их глобально, если только я не смогу повторно включить их после выполнения своей работы).
rm -r Backups.backupdb/MacBook/Latest/MacBook/somedir
; если вы согласны, то, пожалуйста, примите ответ Арне?Ответы:
Чтобы обойти ошибки «операция не разрешена», используйте программу обхода Time Machine Safety Net :
В 10.8 Mountain Lion объезд перешел в «Помощники»:
В 10.10 Йосемити перебрался сюда:
Будьте осторожны при использовании этого для удаления определенных снимков: поскольку Time Machine использует жесткие ссылки, использование
rm -r
папок также может повлиять на более старые и новые снимки одного и того же компьютера . (См. Другие ответы, относящиеся кtmutil delete
безопасному удалению определенного снимка.) Впрочем, использованиеrm
для удаления всех снимков для одного компьютера вполне допустимо. И поэтому используетсяrm
для удаления определенного файла, который удалит только этот файл с жесткой связью из указанных снимков, если он не находится в каталоге с жесткой связью, поскольку тогда вы фактически удалите файл из всех эти жестко связанные каталоги.источник
sudo ...bypass rm -rf /Volumes/...
rm
процесс не понимает их и будет переходить по этим ссылкам и удалять файлы из них. Это означает, что вы можете удалить файлы, которые также находятся в более старых и более новых резервных копиях, чем та, которую вы выбрали, что может нанести непоправимый ущерб резервным копиям. Рекомендация Арне Стенстрём об использованииtmutil
является безусловно лучшим решением.rm
жестко связанных файлов - это нормально, а для жестко связанных папок - нет. В ответе Кента упоминается та же проблема. А в Что такое команда Unix для создания жесткой ссылки на каталог в OS X? в 2010 году кто-то написал для 10.5: «Удаление - это другая история: если вы будете использовать обычный способ удаления каталогов, вы удалите содержимое. Поэтому вы должны« отсоединить »каталог:unlink new_hard_link
». Так что используйте это только для удаления всех резервных копий (снимков) для данного компьютера.BLUF (нижняя строка впереди):
Использование для удаления всех списков управления доступом из иерархии папок не работает над файлами и папками с помощью Time Machine Backups.backupdb , из - за TM Safety Net механизма и критерии , описанная в этом 318 Tech Journal поста (но , возможно , не так , как описано выше) , (Перед изучением этого из поиска Сети безопасности, упомянутой в ответе Эрика В. (которая работает), я тестировал только папку, клонированную из подпапки резервной копии TM, и там chmod работал. Но пробовал chmod на папке в реальной Резервное копирование TM выдает ошибку «Операция не разрешена».)
sudo chmod -R -N folder
Возможное использование:
в Mac OS 10.7+ есть команда tmutil (которую я не пробовал, так как я все еще на Snow Leopard). Он имеет глагол удаления , который в соответствии с описанием «может удалять моментальные снимки из резервных копий, которые не были сделаны или не заявлены текущим компьютером» (где «моментальный снимок» - это папка с датой, представляющая одну инкрементную резервную копию). Мне не ясно, означает ли это, что он не может удалять снимки , сделанные или заявленные текущей машиной. (?)
источник
tmutil delete /Volumes/DISK/Backups.backupdb/HOST/DATE_FOLDER
). Тем не менее, вам все еще нужен обходной трюк Эрика, чтобы удалить саму папку «Backups.backupdb».sudo tmutil delete <snapshot-dir>
. Популярныйbypass rm
ответ устарел.tmutil
для удаления только некоторые файлы из снимка? Это не сработало для меня (Invalid deletion target (error 22)
), поэтому я пошел сbypass
.Backups.backupdb
каталог, который не вижу на моем резервном диске (Time Capsule). У меня просто есть вещи в формеMachineName.sparsebundle
. Формат изменился? Я пытаюсь использовать команду удаления резервной копии TM, но она застряла на индикаторе прогресса 99,99% на несколько часов.Предупреждение об использовании
bypass
команды для удаления старой резервной копии: если в удаленной резервной копии есть папки, которые в точности совпадают в более ранних или более поздних резервных копиях, то файлы могут быть также удалены из более ранних или более поздних резервных копий !Time Machine не только использует жесткие ссылки для неизмененных файлов, но также использует жесткие ссылки для папок, в которых файлы не были добавлены, изменены или удалены вообще. Это приводит к чему-то вроде:
С учетом вышесказанного, удаление любого файла из
/2014-11-06/folder/
в порядке, и влияет только на резервную копию на эту дату. Жесткие подсчет ссылки уменьшаются, так что « индексный дескриптор » дляfile2
будет удален, но дескрипторы дляfile1
и по-file3
прежнему будет иметь счетчик ссылок 1 из - за последующие резервные копии. Следовательно,rm -R /2014-11-06
тоже хорошо.Тем не менее, удаление любого файла из любого
/2014-11-13/folder/
,/2014-11-20/folder/
или/2014-11-27/folder/
эффективно удалит его из всех этих 3 папок.Проблема в том, что
rm -R
не заботятся о жестко связанных папках. Он просто возвращается в любую жестко связанную папку, которую находит, смело удаляет все свои файлы, а затем удаляет пустую папку.Итак: при удалении старой резервной копии не следует возвращаться в жестко связанную папку и удалять ее содержимое. Вместо этого нужно удалить только жесткую ссылку для самой папки . Так что вместо того, чтобы
rm -R
использовать,tmutil delete
как объяснено в ответе Арне .Как и в сторону, кажется , что OS X
unlink
команда не может быть использована в папках : «только один аргумент, который не должен быть каталогом, могут быть поставлены» . API OS X может удалять жестко связанные папки, как и GNU Coreutils , например, установленный с помощью Homebrew .Наконец, чтобы доказать все вышесказанное, тестовый пример (OSX 10.6.8):
Обратите внимание, что количество ссылок для каждого экземпляра равно 2 (второй столбец). Давайте удалим первое вхождение:
Таким образом, после отмены связи одного из файлов количество ссылок уменьшилось до 1 для каждого вхождения, хотя файл все равно отображается 3 раза. Проблем пока нет. Удалите первое вхождение снова:
Теперь все прошло. Очевидно, что файл
TopSites.plist
был последний раз изменен 2014-11-06 и жестко связан с 2014-11-13, так как некоторые другие файлы были добавлены, изменены или удалены вSafari
папке. Затем содержимоеSafari
папки не изменилось в последующих двух резервных копиях, поэтому в 2014-11-20 и 2014-11-27Safari
папка была жестко связана с предыдущей резервной копией.Действительно, в 4 папках используется только 2 inode (первый столбец)
источник
touch file1; ln file1 file2; ln file2 file3; ls -li; rm file2; ls -li
удалит только одну жесткую ссылку. Но для папок , в Что такое команда Unix для создания жесткой ссылки на каталог в OS X? в 2010 году кто-то написал для 10.5: «Удаление - это другая история: если вы будете использовать обычный способ удаления каталогов, вы удалите содержимое. Поэтому вы должны « отсоединить »каталог:unlink new_hard_link
». Это, вероятно, все еще в силе.unlink
(в 10.6.8) говорит , что он не может быть использован в каталогах:When the utility is called as unlink, only one argument, which must not be a directory, may be supplied
.[bypass] rm -r
жестко связанные каталоги. (Но я не обязан вам это объяснять.)bypass unlink FILE
имеет те же (непреднамеренные?) Последствия, что иbypass rm FILE
. Идентичный ФАЙЛ удаляется из всех резервных копий, а не только из одного указанного местоположения. И,unlink
НЕ будет принимать каталог или более одного файла в качестве аргумента (сервер 10.6.8; но я не думаю, что это изменится в более новых версиях ОС)bypass rm FILE
иbypass unlink FILE
удаляя все одинаковые файлы, которые не соответствуют тому , что один видит заtouch file1; ln file1 file2; ln file2 file3; ls -li; unlink file2; ls -li
, ни заtouch file1; ln file1 file2; ln file2 file3; ls -li; /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass unlink file2; ls -li
. Я никогда не собираюсь удалять что-либо из резервной копии ...Примечание. Из-за упоминания Эрика У «Сети безопасности ТМ» этот ответ не работает в случае резервной копии Time Machine, к которой конкретно относится этот вопрос. Но для большинства других случаев информация о том, как избавиться от ACL, актуальна.
Нет необходимости использовать инструменты ACL, скопированные со старой ОС.
Используйте
ls -le
для просмотра списков ACL иchmod
их изменения.Для получения дополнительной информации, введите
man chmod
и посмотрите в разделе «Параметры манипуляции ACL».Команда для удаления всех ACL из иерархии папок:
источник
Машина времени работает как rshapshot. Он создает дерево жестких ссылок для каждой новой резервной копии. Жесткие ссылки на файлы, уже существующие в предыдущей резервной копии, занимают очень мало дополнительного места. Только когда последняя жесткая ссылка на файл удаляется, файл фактически удаляется из файловой системы.
Удаление всей отдельной резервной копии не повредит. Вы просто удаляете жесткие ссылки. Другие резервные копии не будут затронуты. Но это может быть достигнуто через tmutil.
Один сценарий, в котором может быть необходимо обойти защиту, - удалить определенный файл из всех резервных копий (и причину, по которой я оказался в этом посте).
Мой резервный диск заполнен. У меня есть очень большой файл (много гигабайт), резервная копия которого месяцами. Существует одна физическая копия, но множество снимков с жесткими ссылками на эту копию. Чтобы на самом деле избавиться от этого файла, мне нужно удалить жесткую ссылку из каждой резервной копии.
Обратите внимание, что номер индекса одинаков для всех жестких ссылок на один и тот же файл.
(Последний - просто символическая ссылка на последний каталог с датой)
Файл удаляется из всех резервных копий, и возвращается место. Если файл менялся с течением времени, у каждой резервной копии будет полная копия, а возвращаемое пространство будет огромным.
источник
rm -r
может быть (или: были) опасными. Лучше быть в безопасности, чем потом сожалеть и использоватьtmutil
для этого.Если вы не выполняете команду как пользователь, которому «принадлежит» резервная копия, вам будет сложно удалить ее из командной строки. У меня просто была эта проблема с миграцией, и мы должны были выполнить полное резервное копирование Time Machine (1 ТБ +) и отформатировать диск, прежде чем мы смогли получить какой-либо доступ к нему - и поверьте мне, я попробовал все, чтобы переопределить разрешения.
источник
chattr
). Теоретически рут даст вам возможность обойти любую сеть безопасности.Если вы хотите удалить все файлы в папке, а не только определенные файлы, вы можете сделать это, добавив папку в список исключений Time Machine. (Системные настройки -> Time Machine -> Параметры. Перетащите сюда папку.)
В следующий раз, когда вы выполните резервное копирование, копии этой папки будут удалены из предыдущих резервных копий.
Теперь, если вы действительно хотите сделать это из CLI, есть способ, хотя и немного громоздкий.
plutil -convert xml1 com.apple.TimeMachine.plist
чтобы преобразовать его из двоичной формы.
<string>/Path/To/Exclude</string>
plutil -convert binary1 com.apple.TimeMachine.plist
/System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper -auto
Редактировать: при выполнении шага 9 все копии вновь исключенной папки будут удалены из предыдущих резервных копий.
Чтобы удалить исключение, скопируйте резервную копию обратно в / Library / Preferences.
источник
su - root
а затемrm -rf
и папки, но я думаю, что возиться с чем-то таким ценным, как резервные копии, - это то, чего обычно следует избегать.sudo
имеет тот же эффект, что иsu - root
на Mac. Кажется, я вспоминаю случай, когда пытался удалить что-то,sudo
чего не хватало, ноsudo - root
сделал свое дело.Вы можете сделать
ls
список расширенных атрибутов в длинном представлении, используя-@
флаг. Это будет список ACL, когда вы поставите-e
флаг. Таким образом, вы можете узнать, с чем имеете дело, используяls -lea@ DIR
.Судя по моим локальным резервным копиям Time Machine, похоже, что Time Machine применяет расширенные атрибуты с метаданными о самых новых и самых старых снимках. Данные, хранящиеся в xattrs, выглядят как двоичный список. Это кажется безобидным.
Time Machine также рассматривает возможность применения списков ACL к определенным каталогам, о которых он знает, например к тем, которые размещены в стандартном пользовательском каталоге. На вашем пути могут стоять два типа ACL: те, которые применяются непосредственно к файлу или каталогу, которые запрещают удаление, и те, которые применяются к родительскому файлу, который запрещает delete_child.
К сожалению, Mac OS X не предоставляет пользовательских утилит
getfacl
иsetfacl
определяется POSIX.2c для просмотра и управления ACL. Чтобы связываться с ACL, вам придется заняться программированием; см.acl(3)
справочную страницу.источник