PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB`/* * qcow2.h --- structures and function prototypes for qcow2.c to generate * qcow2 formatted disk images. This format is used originally by QEMU * for virtual machines, and stores the filesystem data on disk in a * packed format to avoid creating sparse image files that need lots of * seeking to read and write. * * The qcow2 format supports zlib compression, but that is not yet * implemented. * * It is possible to directly mount a qcow2 image using qemu-nbd: * * [root]# modprobe nbd max_part=63 * [root]# qemu-nbd -c /dev/nbd0 image.img * [root]# mount /dev/nbd0p1 /mnt/qemu * * Format details at http://people.gnome.org/~markmc/qcow-image-format.html * * Copyright (C) 2010 Red Hat, Inc., Lukas Czerner * * %Begin-Header% * This file may be redistributed under the terms of the GNU Public * License. * %End-Header% */ /* Number of l2 tables in memory before writeback */ #define L2_CACHE_PREALLOC 512 #define QCOW_MAGIC (('Q' << 24) | ('F' << 16) | ('I' << 8) | 0xfb) #define QCOW_VERSION 2 #define QCOW_OFLAG_COPIED (1ULL << 63) #define QCOW_OFLAG_COMPRESSED (1ULL << 62) #define QCOW_COMPRESSED 1 #define QCOW_ENCRYPTED 2 #define QCOW_CORRUPTED 3 struct ext2_qcow2_hdr { __u32 magic; __u32 version; __u64 backing_file_offset; __u32 backing_file_size; __u32 cluster_bits; __u64 size; __u32 crypt_method; __u32 l1_size; __u64 l1_table_offset; __u64 refcount_table_offset; __u32 refcount_table_clusters; __u32 nb_snapshots; __u64 snapshots_offset; }; typedef struct ext2_qcow2_l2_table L2_CACHE_HEAD; struct ext2_qcow2_l2_table { __u32 l1_index; __u64 offset; __u64 *data; L2_CACHE_HEAD *next; }; struct ext2_qcow2_l2_cache { L2_CACHE_HEAD *used_head; L2_CACHE_HEAD *used_tail; L2_CACHE_HEAD *free_head; __u32 free; __u32 count; __u64 next_offset; }; struct ext2_qcow2_refcount { __u64 *refcount_table; __u64 refcount_table_offset; __u64 refcount_block_offset; __u32 refcount_table_clusters; __u32 refcount_table_index; __u32 refcount_block_index; __u16 *refcount_block; }; struct ext2_qcow2_image { int fd; struct ext2_qcow2_hdr *hdr; struct ext2_qcow2_l2_cache *l2_cache; struct ext2_qcow2_refcount refcount; __u32 cluster_size; __u32 cluster_bits; __u32 l1_size; __u32 l2_size; __u64 *l1_table; __u64 l2_offset; __u64 l1_offset; __u64 image_size; }; /* Function prototypes */ /* qcow2.c */ /* Functions for converting qcow2 image into raw image */ struct ext2_qcow2_hdr *qcow2_read_header(int); int qcow2_write_raw_image(int, int, struct ext2_qcow2_hdr *);