본문 바로가기

학부_대학원/대학원_학과공부정리

[QEMU] qocw2 파일 포맷

SMALL

https://people.gnome.org/~markmc/qcow-image-format.html


QCOW 이미지 형식은 QEMU 프로세서 에뮬레이터에서 지원하는 디스크 이미지 형식 중 하나이다.

이것은 파일의 고정 크기 블록 장치를 나타냅니다. raw dump를 사용하는 이점은 다음과 같다.


1. 파일 사이즈가 작다. holes를 지원하지 않는 파일 시스템에서도 

2.  QCOW 이미지는 원본 이미지의 내용에 실제로 영향을주지 않고 다른 디스크 이미지에 변경 내용을 저장하는 데 사용할 수 있습니다.

3. 이미지에 이미지 기록의 여러 스냅 샷이 포함될 수있는 스냅 샷 지원 [2번의 특성을 이용]

4. [선택] zlib 기반 압축

5. [선택] AES 암호화



해당 qemu-img convert는 qcow2, qed, raw, vdi, vhd, vmdk 모두 변형 가능

$> qemu-img create -f qcow2 test.qcow2 4G //qcow2 format으로 4g test.qcow 생성 Formating 'test.qcow2', fmt=qcow2, size=4194304 kB $> qemu-img convert test.qcow2 -O raw test.img // qocw2 이미지를 raw test.img로 변환



QOCW파일 포맷 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  typedef struct QCowHeader {
      uint32_t magic; //
      uint32_t version;
 
      uint64_t backing_file_offset;
      uint32_t backing_file_size;
 
      uint32_t cluster_bits;
      uint64_t size/* in bytes */
      uint32_t crypt_method;
 
      uint32_t l1_size;
      uint64_t l1_table_offset;
 
      uint64_t refcount_table_offset;
      uint32_t refcount_table_clusters;
 
      uint32_t nb_snapshots;
      uint64_t snapshots_offset;
  } QCowHeader;
cs

  • The first 4 bytes contain the characters 'Q', 'F', 'I' followed by 0xfb.
  • The next 4 bytes contain the format version used by the file. Currently, there has been two versions of the format, version 1 and version2. We are discussing the latter here, and the former is discussed at the end.
  • The backing_file_offset field gives the offset from the beginning of the file to a string containing the path to a file; backing_file_size gives the length of this string, which isn't a nul-terminated. If this image is a copy-on-write image, then this will be the path to the original file. More on that below.
  • The cluster_bits fields them, describe how to map an image offset address to a location within the file; it determines the number of lower bits of the offset address are used as an index within a cluster. Since L2 tables occupy a single cluster and contain 8 byte entires, the next most significant cluster_bits, less three bits, are used as an index into the L2 table. the L2 table. More on the format's 2-level lookup system below.
  • The next 8 bytes contain the size, in bytes, of the block device represented by the image.
  • The crypt_method field is 0 if no encryption has been used, and 1 if AES encryption has been used.
  • The l1_size field gives the number of 8 byte entries available in the L1 table and l1_table_offset gives the offset within the file of the start of the table.
  • Similarily, refcount_table_offset gives the offset to the start of the refcount table, but refcount_table_clusters describes the size of the refcount table in units of clusters.


LIST

'학부_대학원 > 대학원_학과공부정리' 카테고리의 다른 글

OS Remote Detection - [2]  (0) 2018.03.19
[initrd] Initial RAM disk  (0) 2018.03.09
[QEMU] 주변장치 추가  (0) 2018.03.05
[QEMU] DBI 번역  (0) 2018.02.27
[QEMU] Execution 분석  (0) 2018.02.26