コマンドラインを使用してTime Machineファイルを削除するにはどうすればよいですか


68

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を使用したくない理由はいくつかあります。可能であれば、他のすべてのファイルの拡張保護を維持できるようにしたい(作業を行った後に再度有効にできる場合を除き、グローバルに無効にしたくない)。


私は近づいてきました。まず、Time MachineディスクでACLを無効にする必要がありました。以前は、これを行うにはfsaclctlを使用していましたが、Snow Leopardには含まれていません。OSXの古いバージョンからバイナリのコピーを取得し、これを実行しました:%sudo fsaclctl -p / Volumes / tmvol -d次に、「sudo rm -rf」を使用してディレクトリを削除しようとしましたが、一部のファイル(ただし、他のファイルはうまくいきませんでした)。具体的には、ソフトリンクで失敗しました。非常に奇妙な。プラス面では、リンクはほとんどスペースを占有しません。マイナス面として、ディレクトリがまだ残っています。
ティム

あなたのようなスナップショットやスナップショット内のフォルダーを削除するとき、受け入れられた答えは非常に危険であるようrm -r Backups.backupdb/MacBook/Latest/MacBook/somedirです。同意したら、アルネの答えを受け入れてください?
アルジャン

回答:


115

「許可されていない操作」エラーを回避するには、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 Yosemiteでは、バイパスは次の場所に移動しました。

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

これを使用して特定のスナップショットを削除する場合は注意してください。TimeMachineはハードリンクを使用するためrm -r、フォルダーでの使用は同じマシンの古いスナップショットと新しいスナップショットにも影響する場合があります。(tmutil delete特定のスナップショットを安全に削除することに関する他の回答を参照してください。)しかし、単一のマシンのすべてのスナップショットrmを削除するのに使用しても問題ありません。そしてそう使用しているとして、あなたは実際のファイルを削除したいハードリンクされたディレクトリ内のファイルを想定し、唯一、指定したスナップショット(S)からそのハードリンクされたファイルを削除する特定のファイルを、削除していないすべてのこれらのハードリンクされたディレクトリ。rm


+1 !! これは私を助けました。これは「正しい方法」のように見えたので、他の人を試してさえいませんでした。実際、それ以上の質問なしで問題を解決することができました。ありがとう!
トリプリー

+1するだけのアカウントを作成しました。私はこれに対するより良い解決策を探していましたが、これがそれでした。私を夢中にさせていました。ありがとうございました。
CWSpear

3
驚くばかり。これは動作します。(ただし、数十万個のファイルごとにエントリが表示されるのを避けるために「v」オプションを省略しています)。例:sudo ...bypass rm -rf /Volumes/...
ブレントファウスト

6
これは、Time Machineファイルを管理するための非常に危険な方法です。Time Machineは、ハードリンクされたディレクトリを使用して、前回のバックアップ以降に変更されていないフォルダーを参照しますが、rmプロセスはこれらを理解せず、これらのリンクをたどってファイルを削除します。これは、選択したファイルよりも古いバックアップと新しいバックアップにあるファイルを削除する可能性があり、バックアップに修復不可能な損傷を引き起こす可能性があることを意味します。ArneStenströmの使用の推奨tmutilは、圧倒的に優れたソリューションです。
ハラヴィック

1
Haravikkのコメントを少し拡張するとrm、ハードリンクされたファイルに使用しても問題ありませんが、ハードリンクされたフォルダには使用できません。ケントの答えは同じ問題に言及しています。また、OS Xのディレクトリへのハードリンクを作成するUnixコマンドとは何ですか?誰かが2010年に10.5を書いた:「削除は別の話です。通常の方法でディレクトリを削除すると、内容が削除されます。したがって、ディレクトリを「リンク解除」する必要がありますunlink new_hard_link。」そのため、これを使用して、特定のマシンのすべてのバックアップ(スナップショット)を削除します
アルジャン

26

BLUF(一番下のライン):

sudo tmutil delete snapshot-dir


使用してタイムマシンの中のファイルやフォルダでは動作しませんフォルダ階層からすべてのACLを削除するにはBackups.backupdbための、TMセーフティネットの仕組みと、この中に記載された基準318テックジャーナルポスト(しかしおそらくない正確に説明するように) 。     (Eric Wの回答(動作する)に記載されているセーフティネットを調べてこれを学習する前に、TMバックアップのサブフォルダーからクローン化されたフォルダーでテストしただけで、chmodは機能しました。しかし、実際のフォルダーでchmod TMバックアップでは、「操作は許可されていません」エラーが発生します。sudo chmod -R -N folder

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


2
実際、tmutilは便利であり、バックアップを削除できます(tmutil delete /Volumes/DISK/Backups.backupdb/HOST/DATE_FOLDER)。ただし、「Backups.backupdb」フォルダー自体を削除するには、Ericのバイパストリックが必要です。
mivk

私のOSX 10.8.3(Mountain Lion)はバイパスを必要としませんでした。ただsudo tmutil delete <snapshot-dir>。一般的なbypass rm答えは時代遅れです。
ジョン・ミー

tmutilスナップショットからいくつかのファイルだけを削除することは可能ですか?うまくいかなかった(Invalid deletion target (error 22))ので、bypass代わりに行きました。
ロバートトゥペロシュネック

BLUFの場合は+1。(完全に素晴らしい)Manager-Toolsから取得しましたか?:)
オリー

またBackups.backupdb、バックアップドライブ(Time Capsule)に表示されていないディレクトリへの参照を見つけ続けます。形のものがあるだけMachineName.sparsebundleです。フォーマットは変更されましたか?TMのバックアップの削除コマンドを使用しようとしていますが、99.99%の進行状況バーで数時間スタックしています。
オリー

12

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/問題はなく、その日のバックアップのみに影響します。ハードリンクの参照カウントは「ので、減少しているiノードについては、」file2削除されますが、iノードのためにfile1file3により、後のバックアップにはまだ1の参照カウントを持っています。したがって、 rm -R /2014-11-06大丈夫です。

しかし、どちらかから任意のファイルを削除/2014-11-13/folder//2014-11-20/folder/または/2014-11-27/folder/効果的にそれらのすべての3つのフォルダから削除されます。

問題は、rm -Rハードリンクされたフォルダーを気にしないことです。見つかったハードリンクフォルダに再帰し、すべてのファイルを大胆に削除してから、空のフォルダを削除します。

したがって、古いバックアップを削除する場合、ハードリンクされたフォルダーに再帰してその内容を削除しないでください。代わりに、フォルダ自体のハードリンクのみを削除する必要があります。したがって、Arneの回答で説明さているようrm -R使用するのではなく。tmutil delete

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

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

そのため、いずれかのファイルのリンクを解除すると、ファイルが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

これですべてがなくなりました。どうやら、ファイルTopSites.plistは2014-11-06に最後に変更され、2014-11-13にハードリンクされたため、Safariフォルダ内の他のファイルが追加、変更、または削除されたようです。次に、Safariフォルダーの内容は後続の2つのバックアップで変更されなかったため、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//

1
背景:ファイルの場合、ハードリンクは期待どおりに機能します。削除するハードリンクのみが削除されます。Like:touch file1; ln file1 file2; ln file2 file3; ls -li; rm file2; ls -li単一のハードリンクのみを削除します。しかし、フォルダの場合、OS Xのディレクトリへのハードリンクを作成するUnixコマンドは何ですか?誰かが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。指定された1つの場所だけでなく、すべてのバックアップから同一のFILEが削除されます。また、unlink引数としてディレクトリまたは複数のファイルを使用しません(10.6.8サーバー。ただし、これは新しいOSバージョンで変更されるとは思わない)
ケント

うわー、あなたが見て、まったく同じファイルbypass rm FILEbypass unlink FILE削除したことに驚いています。バックアップから何かを削除することは決してありませんtouch file1; ln file1 file2; ln file2 file3; ls -li; unlink file2; ls -litouch file1; ln file1 file2; ln file2 file3; ls -li; /System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass unlink file2; ls -li
...-Arjan

3

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


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

ls -leACLを表示し、chmodそれらを変更するために使用します。

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

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

chmod -R -N foldername

2

タイムマシンは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

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


「全体の個々のバックアップを削除すると、傷つけることはありません。あなただけのハードリンクを削除している。他のバックアップは影響を受けません。」:これが単一のマシンのバックアップ内のスナップショットを指す場合、与えられたKentの(古い)答えを使用するのrm -rは危険かもしれません(またはされています)。申し訳ありませんが、安全に使用tmutilしてください。
アルジャン

0

バックアップを「所有する」ユーザーとしてコマンドを実行していない場合は、コマンドラインから削除するのが難しくなります。移行時にこの問題が発生しましたが、Time Machineバックアップ(1tb +)全体に移動して、ドライブに何らかの種類のアクセスを取得する前にフォーマットする必要がありました。


2
sudoを使用すると、管理者として実行しているすべてのファイルにアクセスできます。これはACLの問題であると確信しており、現在取り組んでいます。
ティム

1
ニック、数年遅れですが、それを見逃した場合のために:エリックの答えをご覧ください。
アルジャン

@Tim:このアサーションは、不変の属性(chattr)が与えられた場合、他のunixoidシステムでも事実ではありません。ルートが理論的に提供するのはセキュリティネットを回避することです。
0xC0000022L

0

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

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

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

  1. /Library/Preferences/com.apple.TimeMachine.plistのバックアップを作成します
  2. /Library/Preferences/com.apple.TimeMachine.plistを、おもしろいところにコピーしてください。
  3. あなたがそれを置くところにCd。
  4. 実行
    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にコピーして戻します。


ディレクトリを除外しようとはしていません。既存のバックアップからディレクトリを削除し、コマンドラインからいくつかを実行しようとしています。本当に、私はrmがBackups.backupdbディレクトリ内で動作することを許可する方法を理解したいと思います。
ティム

わかりました。おそらく、上記の手順を実行したときに、フォルダーが実際にバックアップから削除されることは、私の指示から明らかではありませんでした。編集をご覧ください。それはあなたが探している解決策ではない場合でも、その後、私はあなたが常にできたと仮定su - rootして、rm -rfフォルダが、私はその方法でバックアップと同じくらい大切な何かをいじることは1は、一般的に回避しようとすべきものだと思います。

ただし、除外として追加すると、すべてのバックアップからすべてのコピーが削除されます。また、これはTimeMachineバックアップですが、この作業を行っているマシンからのものではないため、アクティブなTimeMachineではありません。sudoには、「su-root」、次に「rm -rf」と同じ効果があります。Appleは単純な* nixパーミッションを超えてファイルシステムにセキュリティレベルを追加しているため、これは間違いだと確信しています。
ティム

これは愚かに聞こえるかもしれませんが、Macの場合sudoと同じ効果があるかどうかは完全にはわかりませんsu - root。私は、sudo十分ではなかったsudo - rootが、トリックをした何かを削除しようとした時のことを思い出すようです。

3
@Frost-Time Machineがあなたの提案通りに機能するとは思わない。フォルダを除外してからTMを実行しようとしましたが、そのフォルダの古いバックアップがTMに残っています。あるいは、ほぼ1年前に投稿してからその動作が変更された可能性があります。
カフェインCom

0

フラグlsを使用して、長いビューでリスト拡張属性を作成できます-@-eフラグを指定すると、ACLがリストされます。そのため、を使用して、何を扱っているかを知ることができますls -lea@ DIR

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.