KVM/Qemu를 사용하여 게스트를 위한 전체 디스크 레이아웃을 위조할 수 있습니까?

KVM/Qemu를 사용하여 게스트를 위한 전체 디스크 레이아웃을 위조할 수 있습니까?

내가 알고 싶은 것은 QCOW2(또는 다른 형식)를 사용하여 물리적 범위를 위조하여 파일을 백업 스토리지 및 파티션으로 혼합하고 일치시킬 수 있는지 여부입니다.

즉, 게스트가 사용하기를 원하는 물리적 디스크가 있는 경우 (물론 독점적으로) 디스크에 있는 콘텐츠 와 호스트의 콘텐츠가 /dev/sda2포함된 일종의 디스크 이미지를 준비하여 표시할 수 있습니까? 게스트 내부 및 디스크 이미지의 다른 파티션은 파일(또는 자동 증가) 디스크 이미지 자체에 의해 백업됩니다./dev/hda{1..4}/dev/sda2/dev/hda1

kpartx본질적으로, 나에게 필요한 것은 분할된 테이블과 같은 도구를 사용하여 이미지 설정을 제공함으로써(단지 한 가지 가능한 접근 방식을 상상함으로써) 달성할 수 있습니다 . losetup일단 kpartx/ 를 사용할 수 있으면 losetup모든 것이 매우 유연해야 하기 때문입니다.

거기 비슷한 게 있나요?

답변1

이렇게 할 수는 있지만 실제로 권장하는 것은 아닙니다.

다음은 안전하게 실험할 수 있는 4개의 작은 디스크 이미지 파일을 사용하는 예입니다. 필요한 경우 이들 중 하나를 실제 장치로 교체할 수 있습니다.

# Create four empty disk image files
dd bs=1M count=1 </dev/zero >img.1
dd bs=1M count=100 </dev/zero >img.2
dd bs=1M count=100 </dev/zero >img.3
dd bs=1M count=1 </dev/zero >img.4

# Convert them into block devices
losetup /dev/loop1 img.1
losetup /dev/loop2 img.2
losetup /dev/loop3 img.3
losetup /dev/loop4 img.4

# Build the array. There is no metadata written anywhere that records the array
# construction - you really are on your own with this one if it goes wrong
mdadm --build /dev/md0 --level linear --raid-devices 4 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4

# Create partition table
# This should match the sizes of the image files (above)
parted --align none /dev/md0 <<'x'
  unit MiB
  mklabel gpt
  mkpart primary 1 101
  mkpart primary 101 201
  mkpart primary 201 100%
  quit
x

복합 선형 "디스크"의 시작과 끝에 있는 1MB 파티션은 GPT를 저장하는 데 사용됩니다(2개가 기록됨). 2개의 100MB 파티션이 데이터를 나타냅니다.

RAID0과 LINEAR는 동일하지 않습니다. RAID0은 모든 "디스크"에 데이터를 스트라이프하는 반면 LINEAR는 단순히 "디스크"를 함께 연결합니다.

/dev/loop1실제 코드에서는 available 등에 의존해서는 안 됩니다 . 대신, 이와 같은 것을 사용한 lo1=$(losetup --show --find img.1)다음 루프 장치를 "$lo1".

관련 정보