2008-04-25 16:41:34 +02:00
|
|
|
Index: qemu-0.9.1/block-vmdk.c
|
|
|
|
===================================================================
|
|
|
|
--- qemu-0.9.1.orig/block-vmdk.c
|
|
|
|
+++ qemu-0.9.1/block-vmdk.c
|
|
|
|
@@ -717,7 +717,7 @@ static int vmdk_create(const char *filen
|
|
|
|
"ddb.geometry.cylinders = \"%lu\"\n"
|
|
|
|
"ddb.geometry.heads = \"16\"\n"
|
|
|
|
"ddb.geometry.sectors = \"63\"\n"
|
|
|
|
- "ddb.adapterType = \"ide\"\n";
|
|
|
|
+ "ddb.adapterType = \"%s\"\n";
|
|
|
|
char desc[1024];
|
|
|
|
const char *real_filename, *temp_str;
|
|
|
|
|
|
|
|
@@ -790,7 +790,9 @@ static int vmdk_create(const char *filen
|
|
|
|
if ((temp_str = strrchr(real_filename, ':')) != NULL)
|
|
|
|
real_filename = temp_str + 1;
|
|
|
|
sprintf(desc, desc_template, time(NULL), (unsigned long)total_size,
|
|
|
|
- real_filename, (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4), total_size / (63 * 16));
|
|
|
|
+ real_filename, (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4),
|
|
|
|
+ total_size / (63 * 16),
|
2008-06-03 01:08:56 +02:00
|
|
|
+ flags & BLOCK_FLAG_SCSI ? "lsilogic" : "ide");
|
2008-04-25 16:41:34 +02:00
|
|
|
|
|
|
|
/* write the descriptor */
|
|
|
|
lseek(fd, le64_to_cpu(header.desc_offset) << 9, SEEK_SET);
|
|
|
|
Index: qemu-0.9.1/block_int.h
|
|
|
|
===================================================================
|
|
|
|
--- qemu-0.9.1.orig/block_int.h
|
|
|
|
+++ qemu-0.9.1/block_int.h
|
|
|
|
@@ -29,6 +29,7 @@
|
|
|
|
#define BLOCK_FLAG_ENCRYPT 1
|
|
|
|
#define BLOCK_FLAG_COMPRESS 2
|
|
|
|
#define BLOCK_FLAG_COMPAT6 4
|
|
|
|
+#define BLOCK_FLAG_SCSI 8
|
|
|
|
|
|
|
|
struct BlockDriver {
|
|
|
|
const char *format_name;
|
|
|
|
Index: qemu-0.9.1/qemu-img.c
|
|
|
|
===================================================================
|
|
|
|
--- qemu-0.9.1.orig/qemu-img.c
|
|
|
|
+++ qemu-0.9.1/qemu-img.c
|
|
|
|
@@ -88,9 +88,9 @@ static void help(void)
|
|
|
|
"QEMU disk image utility\n"
|
|
|
|
"\n"
|
|
|
|
"Command syntax:\n"
|
|
|
|
- " create [-e] [-6] [-b base_image] [-f fmt] filename [size]\n"
|
|
|
|
+ " create [-e] [-s] [-6] [-b base_image] [-f fmt] filename [size]\n"
|
|
|
|
" commit [-f fmt] filename\n"
|
|
|
|
- " convert [-c] [-e] [-6] [-f fmt] filename [filename2 [...]] [-O output_fmt] output_filename\n"
|
|
|
|
+ " convert [-c] [-e] [-s] [-6] [-f fmt] [-O output_fmt] filename [filename2 [...]] output_filename\n"
|
|
|
|
" info [-f fmt] filename\n"
|
|
|
|
"\n"
|
|
|
|
"Command parameters:\n"
|
|
|
|
@@ -104,6 +104,7 @@ static void help(void)
|
|
|
|
" 'output_fmt' is the destination format\n"
|
|
|
|
" '-c' indicates that target image must be compressed (qcow format only)\n"
|
|
|
|
" '-e' indicates that the target image must be encrypted (qcow format only)\n"
|
|
|
|
+ " '-s' indicates that the target image is meant for SCSI (vmdk format only)\n"
|
|
|
|
" '-6' indicates that the target image must use compatibility level 6 (vmdk format only)\n"
|
|
|
|
);
|
|
|
|
printf("\nSupported format:");
|
|
|
|
@@ -242,7 +243,7 @@ static int img_create(int argc, char **a
|
|
|
|
|
|
|
|
flags = 0;
|
|
|
|
for(;;) {
|
|
|
|
- c = getopt(argc, argv, "b:f:he6");
|
|
|
|
+ c = getopt(argc, argv, "b:f:hes6");
|
|
|
|
if (c == -1)
|
|
|
|
break;
|
|
|
|
switch(c) {
|
|
|
|
@@ -258,6 +259,9 @@ static int img_create(int argc, char **a
|
|
|
|
case 'e':
|
|
|
|
flags |= BLOCK_FLAG_ENCRYPT;
|
|
|
|
break;
|
|
|
|
+ case 's':
|
|
|
|
+ flags |= BLOCK_FLAG_SCSI;
|
|
|
|
+ break;
|
|
|
|
case '6':
|
|
|
|
flags |= BLOCK_FLAG_COMPAT6;
|
|
|
|
break;
|
|
|
|
@@ -293,6 +297,8 @@ static int img_create(int argc, char **a
|
|
|
|
error("Unknown file format '%s'", fmt);
|
|
|
|
printf("Formatting '%s', fmt=%s",
|
|
|
|
filename, fmt);
|
|
|
|
+ if (flags & BLOCK_FLAG_SCSI)
|
|
|
|
+ printf(", SCSI");
|
|
|
|
if (flags & BLOCK_FLAG_ENCRYPT)
|
|
|
|
printf(", encrypted");
|
|
|
|
if (flags & BLOCK_FLAG_COMPAT6)
|
|
|
|
@@ -421,7 +427,7 @@ static int img_convert(int argc, char **
|
|
|
|
out_fmt = "raw";
|
|
|
|
flags = 0;
|
|
|
|
for(;;) {
|
|
|
|
- c = getopt(argc, argv, "f:O:hce6");
|
|
|
|
+ c = getopt(argc, argv, "f:O:hces6");
|
|
|
|
if (c == -1)
|
|
|
|
break;
|
|
|
|
switch(c) {
|
|
|
|
@@ -440,6 +446,9 @@ static int img_convert(int argc, char **
|
|
|
|
case 'e':
|
|
|
|
flags |= BLOCK_FLAG_ENCRYPT;
|
|
|
|
break;
|
|
|
|
+ case 's':
|
|
|
|
+ flags |= BLOCK_FLAG_SCSI;
|
|
|
|
+ break;
|
|
|
|
case '6':
|
|
|
|
flags |= BLOCK_FLAG_COMPAT6;
|
|
|
|
break;
|
|
|
|
@@ -471,6 +480,8 @@ static int img_convert(int argc, char **
|
|
|
|
error("Compression not supported for this file format");
|
|
|
|
if (flags & BLOCK_FLAG_ENCRYPT && drv != &bdrv_qcow && drv != &bdrv_qcow2)
|
|
|
|
error("Encryption not supported for this file format");
|
|
|
|
+ if (flags & BLOCK_FLAG_SCSI && drv != &bdrv_vmdk)
|
|
|
|
+ error("SCSI devices not supported for this file format");
|
|
|
|
if (flags & BLOCK_FLAG_COMPAT6 && drv != &bdrv_vmdk)
|
|
|
|
error("Alternative compatibility level not supported for this file format");
|
|
|
|
if (flags & BLOCK_FLAG_ENCRYPT && flags & BLOCK_FLAG_COMPRESS)
|