가상 머신 간 디스크 공간 공유

vm rebase는 중지된 가상 머신의 동일한 디스크 블록을 다른 가상 머신이나 템플릿의 블록과 함께 한 번만 저장하게 합니다. 템플릿 없이 복원했거나 가져온 머신에서 디스크 공간을 되찾을 때 사용하세요.

같은 IPSW로 따로 복원한 두 가상 머신은 디스크 이미지의 상당 부분이 같아도 디스크에서 아무것도 공유하지 않습니다. iOS 27.0 iPhone 두 대는 약 20 GB의 데이터 중 같은 위치에 약 8.6 GB의 동일한 바이트를 가지며, 대부분 시스템 볼륨입니다.

가상 머신 리베이스하기

  1. 두 머신을 모두 중지합니다. 같은 APFS 볼륨에 있어야 합니다.

  2. 리베이스로 얼마나 절약되는지 확인합니다.

    vphone-cli vm rebase second --onto first --dry-run
  3. 가상 머신이나 템플릿을 기준으로 리베이스합니다.

    vphone-cli vm rebase second --onto first
    vphone-cli vm rebase second --onto 3f2a91c0d4e7

--onto는 가상 머신 이름 또는 vm template list의 템플릿 식별자(또는 그 고유한 접두사)를 받습니다. 이름이 둘 다에 일치하면 가상 머신이 우선합니다. --dry-run은 아무것도 쓰지 않고 공유될 양과 기록될 양을 보고합니다.

이전 이미지가 해제될 때까지 기록되는 블록을 위한 여유 공간이 볼륨에 필요합니다.

동작 방식

리베이스는 기준 이미지의 APFS 복제본으로 second의 디스크 이미지를 다시 만들고, 다른 블록만 기록합니다. 이미지를 교체하기 전에 모든 바이트를 원본과 비교하므로, 게스트에는 완전히 같은 디스크가 보입니다.

바뀌는 것은 디스크 이미지뿐입니다. SEPStorage, nvram.bin, config.plist, 기기 식별 정보는 그대로 유지됩니다. 템플릿을 기준으로 리베이스해도 템플릿은 그대로이며, 가상 머신이 그 템플릿의 복제본이 되지도 않습니다. vm template show에도 표시되지 않습니다.

결과 읽기

절약되는 양은 newly shared 수치입니다. 동일하지만 이미 디스크에서 같은 블록인 바이트는 already shared로 보고되며, 이를 리베이스해도 아무것도 해제되지 않습니다.

한 템플릿에서 vm create로 만든 가상 머신들은 이미 그 블록을 공유하므로, 서로를 기준으로 또는 그 템플릿을 기준으로 리베이스해도 거의 해제되지 않습니다. 명령은 비교하기 전에 이를 알려 주며, 절약량이 0.1 GB 미만이면 다시 알려 줍니다. 리베이스할 가치가 있는 가상 머신은 템플릿 없이(--no-template) 복원했거나 가져온 것입니다.

알아 둘 점

  • 다른 무엇도 이전 이미지의 블록을 붙잡고 있지 않을 때만 공간이 돌아옵니다. 가상 머신의 스냅샷과 그 가상 머신에서 만든 복제본은 블록을 유지하므로, 먼저 삭제하지 않으면 절약되지 않습니다.
  • du와 Finder는 여전히 각 이미지를 전체 크기로 계산합니다. 볼륨의 여유 공간(df)이 정확한 기준입니다.
  • 어느 가상 머신이든 디스크에 쓰면 두 이미지는 다시 달라집니다. 템플릿처럼 한 번도 부팅하지 않는 기준이 가장 좋으며, 나중에 다시 리베이스하면 달라진 부분을 되찾을 수 있습니다.
  • 리베이스가 중단되면 가상 머신은 바뀌지 않으며, 그 안에 숨겨진 .rebase-* 폴더가 남을 수 있습니다. 이 폴더는 삭제하세요.

함께 보기