원시 가상 머신 디스크 이미지(kvm)의 크기를 줄이는 방법은 무엇입니까?

원시 가상 머신 디스크 이미지(kvm)의 크기를 줄이는 방법은 무엇입니까?

linux-vm-image.raw크기가 10GB라고 가정 해 보겠습니다 . 내부에는 etx4전체 볼륨으로 확장되는 하나의 기본(GPT가 아닌 "클래식" MS-DOS와 유사한 파티션 테이블이 사용됨) 파티션(LVM이 사용되지 않음)이 있습니다 . 예를 들어 해당 파티션에 할당된 실제 데이터는 3GB입니다.

이 이미지는 일부 가상화 환경(필자의 경우 kvm+OpenStack)에 사용할 준비가 되어 있으며, 이 이미지에서 생성된 모든 VM은 사용자 선택에 따라 대상 가상 디스크 크기에 맞게 크기가 조정됩니다. 따라서 해당 디스크 이미지 내부에 여유 디스크 공간을 유지할 이유가 없습니다.

이 원시 디스크 이미지의 크기를 최소(10GB에서 ~3GB까지)로 축소하려면 어떻게 해야 합니까?

있다일부 지침디스크 이미지 의 경우 이미지만 qcow2사용해야 합니다. , 다른 이미지는 사용할 수 없습니다.rawqcowOVF

내 추측은 다음과 같습니다

  • 이 이미지를 블록 장치로 어딘가에 마운트하십시오.
  • ext4 파티션 내부의 모든 파일을 "시작"으로 이동하도록 유지 관리를 수행합니다. 즉, 여유 공간 조각 모음을 수행합니다.
  • 이미지 마운트 해제
  • 파일 시스템의 크기를 이미지로 축소합니다(내부 데이터 크기와 일치하도록).
  • 이미지 크기 축소(내부 파일 시스템 크기와 일치하도록)
  • 새 파티션 크기에 맞게 파티션 테이블을 이미지로 업데이트

그런데 내가 자전거를 발명하려고 하는 게 아닌가? 내가 원하는 작업을 수행할 수 있는 한 줄 명령이나 특수 소프트웨어가 있습니까?

답변1

Raw 이미지는 실제로 크기 조정이 쉽지 않습니다. 그러나 zerofree(마운트 해제된) 파일 시스템을 시도한 다음 결과 이미지 파일을 압축할 수 있습니다.

또한 대상 환경이 압축된 디스크 이미지를 허용하는 OVF 컨테이너 형식을 지원하는지 확인하세요. (zerofree는 여전히 적용됩니다).

답변2

당신은 올바른 길을 가고 있습니다. 블록 장치(루프 마운트)로 마운트할 수 있다면 아마도 gparted를 사용하여 작업할 수 있을 것입니다.

gparted는 사용자가 원하는 대부분의 작업을 수행합니다.
1. FS 데이터를 파티션 앞으로 이동(FS 축소)
2. 파티션을 축소하고 파티션 테이블을 조정합니다.
3. 남은 "디스크"를 제공할 수도 있습니다. 업데이트된 파티션 테이블(예: 마지막 파티션의 마지막 섹터 등)을 인쇄할 때 크기를 조정합니다.

그게 어려운 부분이에요. 그런 다음 마운트를 해제하세요. "디스크"의 정확한 크기를 직접 계산해야 할 수도 있지만 그 후에는 파일을 간단히 자르면 됩니다.

업데이트: 파티션 테이블이 MBR 유형이면 괜찮습니다. GPT를 사용하면 디스크 끝에 미러 복사본이 있습니다. 따라서 gparted는 이에 대해 충분히 똑똑하지 않을 수 있으므로 주의하십시오(원시 이미지를 직접 제공할 수 없는 경우). 문제가 발생하면 truncate 이후의 단계로 gdisk를 고려하세요. 몇 개의 추가 블록을 잘라내고 gdisk/equiv를 사용하여 미러 복사본을 다시 작성하십시오(아마도 두 번째 루프 마운트가 필요할 것입니다).

관련 정보