LabHub
배우기 러닝패스 코스

仮想化とQEMU/KVM

qcow2イメージを扱う

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

qcow2 이미지를 만들고, 정보를 읽고, 변환하고, 백킹 체인을 세워 골든 이미지 패턴을 손으로 재현합니다.

왜 중요한가

qcow2 의 진짜 힘은 백킹 파일입니다. 읽기는 백킹에서, 쓰기는 오버레이에만 하기 때문에 골든 이미지 하나로 VM 수십 대를 만들 수 있습니다. 여기에는 두 가지 규칙이 따라옵니다. 백킹 파일은 절대 수정하면 안 되고(오버레이가 조용히 깨집니다), 백킹 경로가 이미지 안에 기록되므로 파일을 옮기면 rebase 로 참조를 고쳐야 합니다. 그리고 qemu-img info 의 virtual size 와 disk size 를 구분하지 못하면 씬 프로비저닝 오버커밋을 놓칩니다.

단계

  1. /root/vm 디렉터리를 만들고 /root/vm/base.qcow22G 크기의 qcow2 로 만드세요.
  2. 그 이미지의 가상 크기(바이트)실제 점유(바이트) 를 각각 한 줄씩(가상 크기가 먼저) /root/vm/size.txt 에 적으세요. 실제 점유가 가상 크기보다 훨씬 작아야 합니다.
  3. /root/vm/plain.raw 를 raw 포맷 2G 로 만들고, qcow2raw 의 실제 점유를 qcow2=<바이트> / raw=<바이트> 두 줄로 /root/vm/formats.txt 에 적으세요.
  4. plain.raw 를 qcow2 로 변환해 /root/vm/converted.qcow2 를 만드세요. qemu-img info 에서 포맷이 qcow2 로 나와야 합니다.
  5. base.qcow2 를 백킹으로 하는 오버레이 /root/vm/vm01.qcow2 를 만드세요. 백킹 포맷을 명시해야 합니다.
  6. cluster_size1M 로 지정한 /root/vm/big.qcow2 를 4G 로 만들고, qemu-img info 출력에서 cluster_size 가 보이는 줄을 /root/vm/cluster.txt 로 저장하세요.
  7. base.qcow2/root/vm/golden/base.qcow2옮기고, vm01.qcow2 의 백킹 참조를 새 경로로 고치세요. 고친 뒤 qemu-img info --backing-chain /root/vm/vm01.qcow2 가 오류 없이 두 이미지를 모두 보여 줘야 하며, 그 출력을 /root/vm/chain.txt 로 저장하세요.
  8. /root/vm/inventory.csv 를 만드세요. 첫 줄은 file,format,virtual_size,backing 헤더이고, vm01.qcow2, converted.qcow2, big.qcow2 세 이미지에 대해 각각 한 줄씩 적으세요. backing 은 백킹 파일 경로 또는 none 입니다.

참고

qcow2 이미지 만들기

/root/vm 디렉터리를 만들고 /root/vm/base.qcow22G 크기의 qcow2 로 만드세요.

qemu-img create 는 포맷, 파일명, 크기를 받습니다. 크기 단위는 G 같은 접미사를 씁니다.

가상 크기와 실제 크기

그 이미지의 가상 크기(바이트)실제 점유(바이트) 를 각각 한 줄씩(가상 크기가 먼저) /root/vm/size.txt 에 적으세요. 실제 점유가 가상 크기보다 훨씬 작아야 합니다.

JSON 출력을 쓰면 파싱이 쉽습니다. virtual-size 와 actual-size 두 값을 찾으세요.

raw 와 비교

/root/vm/plain.raw 를 raw 포맷 2G 로 만들고, qcow2raw 의 실제 점유를 qcow2=<바이트> / raw=<바이트> 두 줄로 /root/vm/formats.txt 에 적으세요.

raw 도 희소 파일로 만들어지지만 메타데이터가 없습니다. 두 포맷의 실제 점유를 비교해 보세요.

포맷 변환

plain.raw 를 qcow2 로 변환해 /root/vm/converted.qcow2 를 만드세요. qemu-img info 에서 포맷이 qcow2 로 나와야 합니다.

convert 는 -f 로 입력 포맷, -O 로 출력 포맷을 지정합니다. 압축 옵션도 있습니다.

백킹 파일로 오버레이 만들기

base.qcow2 를 백킹으로 하는 오버레이 /root/vm/vm01.qcow2 를 만드세요. 백킹 포맷을 명시해야 합니다.

-b 로 백킹 파일을, -F 로 그 포맷을 지정합니다. -F 를 빠뜨리면 경고나 오류가 납니다.

cluster_size 지정

cluster_size1M 로 지정한 /root/vm/big.qcow2 를 4G 로 만들고, qemu-img info 출력에서 cluster_size 가 보이는 줄을 /root/vm/cluster.txt 로 저장하세요.

-o 로 포맷별 옵션을 줍니다. info 출력의 Format specific information 에서 확인할 수 있습니다.

백킹 경로 바꾸기

base.qcow2/root/vm/golden/base.qcow2옮기고, vm01.qcow2 의 백킹 참조를 새 경로로 고치세요. 고친 뒤 qemu-img info --backing-chain /root/vm/vm01.qcow2 가 오류 없이 두 이미지를 모두 보여 줘야 하며, 그 출력을 /root/vm/chain.txt 로 저장하세요.

rebase 의 -u 는 데이터를 옮기지 않고 참조만 고칩니다. 파일을 먼저 옮긴 뒤 참조를 맞추세요.

이미지 인벤토리

/root/vm/inventory.csv 를 만드세요. 첫 줄은 file,format,virtual_size,backing 헤더이고, vm01.qcow2, converted.qcow2, big.qcow2 세 이미지에 대해 각각 한 줄씩 적으세요. backing 은 백킹 파일 경로 또는 none 입니다.

각 이미지의 포맷과 가상 크기를 모으세요. 백킹 파일이 있는 것과 없는 것을 구분해야 합니다.