mac tmutil 비교는 번들이 마운트된 위치에 따라 작동하거나 실패합니다.

mac tmutil 비교는 번들이 마운트된 위치에 따라 작동하거나 실패합니다.

Time Machine을 Time Capsule에 사용 - 백업이 원활하게 작동합니다. 문제는 'tmutil 비교'를 사용하여 두 백업 간의 차이점을 확인하려고 하는 것입니다. MacOS Mojave 10.14.5(이전 OS 버전에서도 동일한 문제).

응용 프로그램

Time Machine을 사용하여 네트워크에 있는 여러 Mac을 여러 백업 드라이브에 백업하세요. 목적은 주기적으로 'tmutil 비교' 작업을 실행하여 백업 중인 내용, 파일 수, 데이터 양 등을 확인하는 것입니다.

BackupLoupe와 같은 앱은 이에 대한 GUI를 제공합니다. 이는 좋은 일이지만 각 스파스 번들을 수동으로 마운트해야 합니다. (그리고 지금은 Mojave와의 작동이 중단된 것 같습니다.)

따라서 프로세스를 자동화하려는 의도는 다음과 같습니다.

  1. tmutil Destinationinfo를 사용하여 백업 드라이브 목록을 확인하세요.
  2. 모든 드라이브를 마운트합니다(별도의 마운트 지점에).
  3. 각 드라이브를 검사하여 Mac 목록을 얻습니다(예: mymac1.sparsebundle, mymac2.sparsebundle, ...)
  4. 각 Mac에 대해 각 드라이브(해당 Mac에 대한 sparsebundle이 있음)에 대해 sparsebundle을 마운트하고 Backups.backupdb 노드가 있는지 확인하고 모든 백업을 나열한 다음(2019-05-22-111213) 'tmutil을 실행합니다. 각 항목과 진행 항목을 비교'합니다.

캐시는 자동으로 유지되므로 'tmutil 비교' 단계는 새 백업에 대해서만 실행됩니다.

'tmutil 비교'는 시간이 오래 걸릴 수 있으므로 단계 (4)는 각 Mac이 처리되고 별도의 스레드(각 디스크당 하나씩)가 시작되어 병렬로 실행되도록 설계되었습니다. 추가 Mac에 대해 더 많은 스레드를 시작하면 동일한 드라이브에 액세스하기 위해 경쟁하는 병목 현상이 발생한다고 가정했습니다.

이것은 작동합니다

Finder를 사용하여 Time Capsule에 연결합니다(뒤에서 /Volumes/mydisk 생성). Finder에서 관심 있는 mymac.sparsebundle을 찾아 DiskImageMounter로 엽니다(배후에서 /Volumes/Time Machine 백업 생성).

터미널로 이동하여 다음을 수행하십시오.

   cd "/Volumes/Time Machine Backups/Backups.backupdb/mymac"
   tmutil compare 2019-05-19-034451 2019-05-18-220446

출력은 정확히 예상한 대로입니다.

실패

2개의 디렉터리(../mytemp/mount 및 ../mytemp/bundle(마운트 지점))를 만듭니다. tmutils Destinationinfo를 실행하여 마운트 문자열을 가져옵니다.

실행: mount_afp -o rw "afp://tc:pwd@tc._afpovertcp._tcp.local./diskname" ../mytemp/mount

실행: hdiutil attachment ../mytemp/mount/mymac.sparsebundle -readwrite -mountroot ../mytemp/bundle

실행: cd "../mytemp/bundle/Time Machine Backups/Backups.backupdb/mymac"

이것들은 모두 예상대로 작동합니다. mymac.sparsebundle은 ../mytemp/bundle에 마운트됩니다. 마운트된 스파스 번들에 'cd'할 수 있습니다. 'ls'는 예상대로 모든 백업 파일을 나열합니다.

그러나 실행: tmutil은 2019-05-19-034451 2019-05-18-220446을 다시 비교하여 다음을 얻습니다.

Must specify at least one item inside a backup.

실제로 2019-05-19-034451 백업이나 다른 백업에 'cd'할 수 있으며 'ls'는 예상되는 내용을 정확하게 보여줍니다. 여러 수준으로 'cd'할 수 있고 일부 파일을 콘솔로 'cat'할 수 있습니다.

양방향 마운트 후 같은 레벨로 내려간 후 'touch dummy.file.txt'를 실행하여 실제로 파일을 생성했습니다. 이는 실패했지만 두 마운트 시나리오 모두에서 'sudo'를 추가하는 데 성공했습니다. (주어진 백업 내에서 두 설정 중 하나에서 실패했습니다.)

인증 문제가 있는 경우 'sudo tmutil ...'도 시도했지만 결과는 동일했습니다. 또한 다양한 수준에서 일부 'ls -la' 명령을 수행했지만 할당된 'rwx'에는 뚜렷한 차이가 없었습니다.

시스템 속성의 전체 디스크 액세스 목록에 tmutil을 추가했습니다.

실행: log show --predicate 'process=="tmutil"'

그러나 성공 사례와 실패 사례 모두에 대해 동일한 출력을 표시합니다.

결국! 컨텍스트, 권한, ???의 차이점은 무엇입니까? Finder와 DiskImageMounter는 mount_afp 및 hdiutil과 어떻게 다릅니까? 일부 수준은 읽기 전용이고 tmutil이 로그를 업데이트하려고 합니까?

어떤 도움이나 제안이라도 대단히 감사하겠습니다!

업데이트

2단계 분해 - 마운트운전하다mount_asp를 사용하여 마운트한 다음묶음DiskImageManager를 사용하면 작동합니다. 따라서 문제는 hdiutil과 DiskImageManager를 사용하는 데 있습니다.

업데이트 2

여전히 WIP이지만 'tmutil'인 것 같습니다.필요하다번들은 /Volumes 내에 마운트되어야 합니다!

심볼릭 링크를 생성하여 속이려고 했습니다.

/Volumes/Time Machine Backups -> my mount point 

하지만 여전히 실패합니다. 다른 해결 방법을 시도합니다.

이것이 tmutil의 진정한 요구 사항인지 아는 사람이 있습니까? 어디에도 문서화되어 있나요?

해결됨(그러나 해킹입니다!)

아래에 여러 개의 스파스 번들을 마운트한다는 아이디어로 /Volumes에 루트 마운트 지점을 추가하려고 시도했지만 그것도 작동하지 않았습니다. 분명히 'tmutil'은 번들이 /Volumes의 직계 하위 항목으로 마운트될 것으로 예상합니다.

최종 해킹은 다음과 같습니다.

  1. 드라이브에 대한 마운트 지점 생성: ../mycache/drives
  2. 이 노드 아래에 모든 드라이브를 마운트합니다.
  3. 모두 마운트묶음일반 기본 이름을 사용하는 /Volumes 내 - Time Machine 백업 [n]
  4. 내부적으로 모든 종류의 Time Machine 백업[n]을 나열하여 각 드라이브와 일치하는 마운트를 파악한 다음 번들을 마운트하고 Time Machine 백업 목록[n]을 다시 가져와 어느 것이 새 마운트인지 파악합니다.
  5. 그런 다음 tmutil Compare /Volumes/Time Machine Backups 2/Backups.backupdb/mymac/...를 실행합니다.

이것은 합리적으로 잘 작동합니다. 다른 프로세스가 Time Machine 백업 항목이 있는 스파스 번들을 마운트하는 경우 실패합니다. 위의 논리를 혼동하게 됩니다.

관련 정보