qcow2イメージを扱う
한국어 원문으로 표시합니다.
목표
qcow2 이미지를 만들고, 정보를 읽고, 변환하고, 백킹 체인을 세워 골든 이미지 패턴을 손으로 재현합니다.
왜 중요한가
qcow2 의 진짜 힘은 백킹 파일입니다. 읽기는 백킹에서, 쓰기는 오버레이에만 하기 때문에 골든 이미지 하나로 VM 수십 대를 만들 수 있습니다. 여기에는 두 가지 규칙이 따라옵니다. 백킹 파일은 절대 수정하면 안 되고(오버레이가 조용히 깨집니다), 백킹 경로가 이미지 안에 기록되므로 파일을 옮기면 rebase 로 참조를 고쳐야 합니다. 그리고 qemu-img info 의 virtual size 와 disk size 를 구분하지 못하면 씬 프로비저닝 오버커밋을 놓칩니다.
단계
/root/vm디렉터리를 만들고/root/vm/base.qcow2를 2G 크기의 qcow2 로 만드세요.- 그 이미지의 가상 크기(바이트) 와 실제 점유(바이트) 를 각각 한 줄씩(가상 크기가 먼저)
/root/vm/size.txt에 적으세요. 실제 점유가 가상 크기보다 훨씬 작아야 합니다. /root/vm/plain.raw를 raw 포맷 2G 로 만들고,qcow2와raw의 실제 점유를qcow2=<바이트>/raw=<바이트>두 줄로/root/vm/formats.txt에 적으세요.plain.raw를 qcow2 로 변환해/root/vm/converted.qcow2를 만드세요.qemu-img info에서 포맷이qcow2로 나와야 합니다.base.qcow2를 백킹으로 하는 오버레이/root/vm/vm01.qcow2를 만드세요. 백킹 포맷을 명시해야 합니다.cluster_size를 1M 로 지정한/root/vm/big.qcow2를 4G 로 만들고,qemu-img info출력에서 cluster_size 가 보이는 줄을/root/vm/cluster.txt로 저장하세요.base.qcow2를/root/vm/golden/base.qcow2로 옮기고,vm01.qcow2의 백킹 참조를 새 경로로 고치세요. 고친 뒤qemu-img info --backing-chain /root/vm/vm01.qcow2가 오류 없이 두 이미지를 모두 보여 줘야 하며, 그 출력을/root/vm/chain.txt로 저장하세요./root/vm/inventory.csv를 만드세요. 첫 줄은file,format,virtual_size,backing헤더이고,vm01.qcow2,converted.qcow2,big.qcow2세 이미지에 대해 각각 한 줄씩 적으세요.backing은 백킹 파일 경로 또는none입니다.
참고
qemu-img create -f qcow2 <파일> 2G,qemu-img info --output=json <파일>,qemu-img convert -f raw -O qcow2 <입력> <출력>순서입니다.- 오버레이는
qemu-img create -f qcow2 -b <백킹> -F qcow2 <오버레이>입니다. - 백킹 경로 수정은
qemu-img rebase -u -F qcow2 -b <새경로> <오버레이>입니다. - 흔한 실수 1: 5번에서
-F를 빠뜨리는 경우. 최근 qemu-img 는 경고를 내거나 거부합니다. - 흔한 실수 2: 7번에서 파일만 옮기고 rebase 를 안 하면
Could not open backing file이 납니다.
qcow2 이미지 만들기
/root/vm 디렉터리를 만들고 /root/vm/base.qcow2 를 2G 크기의 qcow2 로 만드세요.
qemu-img create 는 포맷, 파일명, 크기를 받습니다. 크기 단위는 G 같은 접미사를 씁니다.
가상 크기와 실제 크기
그 이미지의 가상 크기(바이트) 와 실제 점유(바이트) 를 각각 한 줄씩(가상 크기가 먼저) /root/vm/size.txt 에 적으세요. 실제 점유가 가상 크기보다 훨씬 작아야 합니다.
JSON 출력을 쓰면 파싱이 쉽습니다. virtual-size 와 actual-size 두 값을 찾으세요.
raw 와 비교
/root/vm/plain.raw 를 raw 포맷 2G 로 만들고, qcow2 와 raw 의 실제 점유를 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_size 를 1M 로 지정한 /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 입니다.
각 이미지의 포맷과 가상 크기를 모으세요. 백킹 파일이 있는 것과 없는 것을 구분해야 합니다.