명령 줄을 사용하여 Time Machine 파일을 삭제하는 방법 관련이 있다고 확신하지만 rm

rm을 사용하여 Time Machine Partition에서 일부 파일 / 디렉토리를 삭제하고 싶지만 삭제할 수 없습니다. 문제가 백업의 파일에 대한 일종의 액세스 제어 확장 속성과 관련이 있다고 확신하지만 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 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

조심 타임 머신은 하드 링크를 사용하기 때문에 사용 : 특정 스냅 샷을 삭제하려면이 옵션을 사용하면 rm -r폴더에 같은 기계의 이전 및 새로운 스냅 샷에 영향을 미칠 수 있습니다 . ( tmutil delete특정 스냅 샷을 안전하게 삭제하는 방법에 대해서는 다른 답변을 참조하십시오 .) 단일 머신의 모든 스냅 샷 rm을 삭제 하는 데 사용 하는 것은 좋습니다. 그리고 rm특정 파일을 삭제하는 데 사용 하고 있습니다.이 파일은 하드 링크 된 디렉토리에 있지 않다고 가정 할 때 지정한 스냅 샷에서 해당 하드 링크 된 파일 만 제거 합니다. 하드 링크 된 디렉토리.


답변

BLUF (하단 선) :

sudo tmutil delete snapshot-dir


사용 시간 기계의에서 파일 및 폴더에서 작동하지 않는 폴더 계층 구조에서 모든 ACL을 제거 Backups.backupdb 때문에, TM 안전망 메커니즘이 설명 된 기준 (318) 기술 저널 포스트 (하지만 아마도 정확히 설명) .
    (Eric W의 답변 (작동)에서 언급 한 Safety Net을 찾아서 배우기 전에 TM 백업의 하위 폴더에서 복제 된 폴더에서만 테스트 했으며 chmod가 작동했지만 chmod 는 실제로 폴더에서 시도했습니다. TM 백업에서 “작업이 허용되지 않습니다”오류가 발생합니다.)sudo chmod -R -N folder

가능한 사용법 :
    Mac OS 10.7 이상에는 tmutil 명령이 있습니다 (여전히 Snow Leopard를 사용하고 있으므로 시도하지 않았습니다). 이것은 보유 삭제 의 설명에있어서 동사 “에 의해 제조되지 않은, 또는, 현재 시스템에 의해 청구되지 백업에서 스냅 샷을 삭제할 수” (a “스냅 샷”은 하나의 증분 백업을 나타내는 일자 폴더이다). 이는 것을 의미한다면 그것은 나에게 명확하지 않다 할 수없는 스냅 샷 삭제 되어 현재 기계에 의해 또는 주장합니다. (?)


답변

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제거됩니다 만, 아이 노드에 대한 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 (두 번째 열)입니다. 첫 번째 발생을 제거합시다 :

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으로 두 번의 백업에서 폴더 의 내용이 변경되지 않았으므로 2014-11-20 및 2014-11-27에서 Safari폴더가 이전 백업에 하드 링크되었습니다.

실제로 4 개의 폴더는 2 개의 inode 만 사용합니다 (첫 번째 열).

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


답변

참고 : Eric W가 언급 한 “TM Safety Net”로 인해 Time Machine 백업의 경우이 답변이 작동하지 않습니다. 그러나 대부분의 경우 ACL을 제거하는 방법에 대한 정보는 관련이 있습니다.


이전 OS에서 복사 한 ACL 도구를 사용할 필요가 없습니다.

ls -leACL을보고 chmod변경하는 데 사용하십시오 .

자세한 내용 man chmod은 “ACL Manipulation Options”를 입력 하고 확인하십시오.

폴더 계층에서 모든 ACL을 제거하는 명령은 다음과 같습니다.

chmod -R -N foldername


답변

타임머신은 rshapshot처럼 작동합니다. 각각의 새 백업에 대한 하드 링크 트리를 작성합니다. 이전 백업에 이미 존재하는 파일에 대한 하드 링크는 추가 공간을 거의 사용하지 않습니다. 파일에 대한 마지막 하드 링크가 제거 된 경우에만 파일이 실제로 파일 시스템에서 삭제됩니다.

전체 개별 백업을 제거해도 손상되지 않습니다. 하드 링크를 제거하고 있습니다. 다른 백업은 영향을받지 않습니다. 그러나 tmutil을 통해 수행 할 수 있습니다.

보호를 우회해야 할 수있는 한 가지 시나리오는 모든 백업에서 특정 파일을 제거하는 것입니다 (이 포스트에서 종료 된 이유).

백업 디스크가 꽉 찼습니다. 몇 달 동안 백업 된 매우 큰 파일 (많은 기가 바이트)이 있습니다. 하나의 물리적 사본이 있지만 해당 사본에 대한 하드 링크가있는 많은 스냅 샷이 있습니다. 실제로 해당 파일을 제거하려면 모든 백업에서 하드 링크를 제거해야합니다.

동일한 파일에 대한 모든 하드 링크에 대해 inode 번호가 동일합니다.

% 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

파일이 모든 백업에서 제거되고 공간이 반환됩니다. 파일이 시간이 지남에 따라 변경된 경우 각 백업에는 전체 사본이 있으며 반환되는 공간은 엄청납니다.


답변

백업을 “소유”하는 사용자로 명령을 실행하지 않으면 명령 줄에서 삭제하기가 어려워집니다. 방금 마이그레이션과 관련 하여이 문제가 있었으므로 모든 Time Machine 백업 (1tb +)을 분리하고 드라이브에 액세스하기 전에 드라이브를 포맷해야했습니다.


답변

특정 파일뿐만 아니라 폴더의 모든 파일을 삭제하려면 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로 다시 복사하십시오.