web-dev-qa-db-ja.com

コマンドラインを使用してTime Machineファイルを削除する方法

rmを使用してTime Machineパーティションからいくつかのファイル/ディレクトリを削除したいのですが、削除できません。私は問題がバックアップ内のファイルのある種のアクセス制御拡張属性に関連していると確信していますが、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 GUIとFinderのどちらも使用したくない理由はいくつかあります。可能であれば、他のすべてのファイルの拡張保護を維持できるようにしたいと思います(作業を完了した後で再度有効にできない限り、それらをグローバルに無効にしたくない)。

69
Tim

「許可されていない操作」エラーを回避するには、 Time Machine Safety Net 「バイパス」プログラムを使用します。

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

10.8 Mountain Lionでは、バイパスは「ヘルパー」に移動しました。

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

10.10ヨセミテでは、バイパスはここに移動しました:

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

注意これを使用して特定のスナップショットを削除する場合:Time Machineはハードリンクを使用するため、フォルダーでrm -rを使用する 古いバージョンにも影響する可能性がある同じマシンの新しいスナップショット 。 (特定のスナップショットを安全に削除するには、tmutil deleteを参照して他の回答を参照してください。)rmを使用して単一のマシンのallスナップショットを削除することもできます。また、rmを使用して特定のファイルを削除すると、指定したスナップショットからハードリンクされたファイルのみが削除されます。ただし、ファイルがハードリンクされたディレクトリにない場合は、 allそれらのハードリンクされたディレクトリから実際にファイルを削除します。

117
Eric W

BLUF(ボトムラインアップフロント):

_Sudo tmutil delete snapshot-dir_


Sudo chmod -R -N folderを使用してフォルダー階層からすべてのACLを削除しても、Time MachineのBackups.backupdbのファイルとフォルダーでは機能しません。 theTM Safety Netメカニズムと、こので説明されている基準のため) 318 Tech Journal post (記載されているとおりではない可能性があります)。
(これは、Eric Wの回答(機能します)で言及されているセーフティネットを調べることから学ぶ前に、TMバックアップのサブフォルダーから複製されたフォルダーでのみテストしました。 chmod は機能しましたが、実際のTMバックアップのフォルダで chmod を実行しようとすると、「操作は許可されていません」エラーが発生します。)

可能な用途:
Mac OS 10.7以降では、tmutilコマンド(まだSnow Leopardを使用しているので、試していません)。 delete動詞があり、 "の説明に従って、作成されていない、または作成されていないバックアップからスナップショットを削除できます。現在のマシンによって要求された "" snapshot "は、単一の増分バックアップを表す日付の付いたフォルダーです)。これが現在のマシンによって作成された、または現在のマシンによって要求されているスナップショットをできない削除できないを削除できるかどうかは、私にはわかりません。 (?)

26
Arne Stenström

bypassコマンドを使用して古いバックアップを削除することに関する警告:削除されたバックアップに以前または以降のバックアップとまったく同じフォルダーがある場合、ファイルが削除される可能性があります以前または後のバックアップ

Time Machineは、変更されていないファイルにハードリンクを使用するだけでなく、ファイルが追加、変更、または削除されていないフォルダーにもハードリンクを使用します。これにより、次のような結果になります。

/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/

上記の場合、/2014-11-06/folder/からファイルを削除しても問題はなく、その日付のバックアップにのみ影響します。ハードリンクの参照カウントが減少するため、file2の " inode "は削除されますが、file1file3のiノードには参照カウントが残ります後のバックアップのために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を使用します Arneの答え

余談ですが、OS X unlinkコマンド フォルダーでは使用できません "ディレクトリであってはならない唯一の引数は、供給される。 OS X APIはハードリンクされたフォルダーを削除できます GNU Coreutils も削除できます-- Homebrew を使用してインストールしたように。

最後に、上記のすべてを証明するために、テストケース(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

各オカレンスのリンク数は2(2列目)であることに注意してください。最初の出現を削除しましょう:

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

そのため、ファイルの1つをリンク解除した後、ファイルが3回表示されているにもかかわらず、リンクの数が発生ごとに1に減少しました。まだ問題ありません。最初の出現を再度削除します。

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

今、すべてがなくなっています。 Safariフォルダで他のファイルが追加、変更、または削除されたため、_TopSites.plistファイルは2014-11-06に最後に変更され、2014-11-13にハードリンクされたようです。次に、後続の2つのバックアップでSafariフォルダーの内容は変更されなかったため、2014-11-20および2014-11-27では、Safariフォルダーは以前のフォルダーにハードリンクされましたバックアップ。

実際、4つのフォルダーは2つのiノード(最初の列)のみを使用します。

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//
12
Kent

注:エリックWによって言及された「TM Safety Net」のため、この回答はTime Machineバックアップの場合には機能しません。これは、質問が特に関係するものです。しかし、他のほとんどすべての場合、情報ACLを取り除く方法については関連があります。


古いOSからコピーしたACLツールを使用する必要はありません。

ACLを表示するには_ls -le_を使用し、変更するにはchmodを使用します。

詳細については、man chmodと入力し、[ACL操作オプション]を確認してください。

フォルダ階層からすべてのACLを削除するコマンドは次のとおりです。

_chmod -R -N foldername
_
3
Ram

タイムマシンはrshapshotのように機能します。新しいバックアップごとにハードリンクのツリーを作成します。以前のバックアップに既に存在するファイルへのハードリンクは、追加のスペースをほとんど使用しません。ファイルへの最後のハードリンクが削除された場合のみ、ファイルは実際にファイルシステムから削除されます。

個々のバックアップ全体を削除しても問題はありません。ハードリンクを削除するだけです。他のバックアップは影響を受けません。しかし、それはtmutilを介して実現できます。

保護をバイパスする必要があるかもしれない1つのシナリオは、すべてのバックアップから特定のファイルを削除することです(そして、私がこの投稿に行き着いた理由です)。

バックアップディスクがいっぱいです。何ヶ月もバックアップされている非常に大きなファイル(数ギガバイト)があります。それの1つの物理コピーがありますが、そのコピーへのハードリンクを持つ多くのスナップショット。実際にそのファイルを削除するには、すべてのバックアップからハードリンクを削除する必要があります。

Iノード番号は、同じファイルへのすべてのハードリンクで同じであることに注意してください。

% 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

(最新のものは、最後に日付が付けられたディレクトリへのシンボリックリンクです)

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

ファイルはすべてのバックアップから削除され、スペースが返されます。ファイルが時間とともに変化している場合、各バックアップには完全なコピーがあり、返されるスペースは非常に大きくなります。

2
Curt

外付けドライブのタイムマシンディレクトリを削除しながら、残りのファイルを削除するために、この組み合わせとコマンドの順序が必要でした。他のオプションがうまくいかなかった場合にのみ、これらを使用してください。

  1. シングルユーザーモードで開始(CMD+S起動時)
  2. Sudo chflags -R nouchg <path to some.backupdb>
  3. Sudo chflags -R noschg <path to some.backupdb>
  4. Sudo chmod -R ugo+rw <path to some.backupdb>
  5. Sudo chmod -R -N <path to some.backupdb>
  6. Sudo rm -rf <path to some.backupdb>

説明: chownがOS Xで「操作は許可されていません」と報告するのはなぜですか?

0
torstenlehmann

バックアップを「所有する」ユーザーとしてコマンドを実行していない場合、コマンドラインから削除するのは困難です。移行でこの問題が発生しました。TimeMachineのバックアップ全体(1 TB以上)を削除し、ドライブにフォーマットしてから、なんらかのアクセスを許可する必要がありました。信頼して、すべてのアクセス許可を上書きしてみました。

0
Nic

_-@_フラグを使用すると、長いビューでlsリスト拡張属性を作成できます。 _-e_フラグを指定すると、ACLがリストされます。したがって、_ls -lea@ DIR_を使用して、処理しているものを見つけることができます。

私のローカルTime Machineバックアップから判断すると、Time Machineは最新のスナップショットと最も古いスナップショットに関するメタデータを含む拡張属性を適用しているようです。 xattrsによって保存されたデータは、バイナリplistのように見えます。これらは無害に見えます。

Time Machineは、標準ユーザーディレクトリに配置されたディレクトリなど、認識している特定のディレクトリにACLを適用することも検討します。邪魔になる可能性のある2種類のACLがあります。削除を拒否するファイルまたはディレクトリに直接適用されるACLと、delete_childを拒否するファイルの親に適用されるACLです。

残念ながら、Mac OS Xは、ACLを表示および操作するためにPOSIX.2cによって指定されたユーザーユーティリティgetfaclおよびsetfaclを提供していません。 ACLをいじるには、プログラミングを行う必要があります。 acl(3)のマンページを参照してください。

0

特定のファイルだけでなく、フォルダ内のすべてのファイルを削除する場合は、フォルダをTime Machineの除外リストに追加することで削除できます。 (システム環境設定-> Time Machine->オプション。フォルダをここにドラッグしてください。)

次にバックアップを実行すると、そのフォルダーのコピーが以前のバックアップから削除されます。

ここで、本当にCLIからこれを実行したい場合は、少し面倒ではありますが、方法があります。

  1. /Library/Preferences/com.Apple.TimeMachine.plistのバックアップを作成します
  2. /Library/Preferences/com.Apple.TimeMachine.plistをいじれる場所にコピーします。
  3. どこに置いてもCd。
  4. Execute
    plutil -convert xml1 com.Apple.TimeMachine.plist
    バイナリ形式から変換します。
  5. 変換されたplistを適切なテキストエディターで開き、「skippaths」を検索します
  6. そのセクションに、<string>/Path/To/Exclude</string>の形式で新しい行を挿入します
  7. 保存して終了し、実行して元に戻す
    plutil -convert binary1 com.Apple.TimeMachine.plist
  8. 編集したplistを/ Library/Preferences /にコピーして戻します
  9. 実行してバックアップを開始する
    /System/Library/CoreServices/backupd.bundle/Contents/Resources/backupd-helper -auto

編集:手順9を実行すると、新しく除外されたフォルダーのすべてのコピーが以前のバックアップから消去されます。

例外を削除するには、バックアップを/ Library/Preferencesにコピーして戻します。

0
Frost