[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] qemu-img: Create SCSI VMDK disks
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH] qemu-img: Create SCSI VMDK disks |
Date: |
Tue, 22 Apr 2008 17:57:16 +0200 |
User-agent: |
Thunderbird 1.5.0.8 (X11/20060911) |
This patch introduces a new option to qemu-img: -s indicates for VMDK
images that the image is meant to be used as SCSI disk. Depending on
the switch "ide" or "buslogic" is written to the image as adapter type.
Signed-off-by: Kevin Wolf <address@hidden>
Index: qemu-svn/block-vmdk.c
===================================================================
--- qemu-svn.orig/block-vmdk.c
+++ qemu-svn/block-vmdk.c
@@ -719,7 +719,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;
@@ -792,7 +792,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),
+ flags & BLOCK_FLAG_SCSI ? "buslogic" : "ide");
/* write the descriptor */
lseek(fd, le64_to_cpu(header.desc_offset) << 9, SEEK_SET);
Index: qemu-svn/qemu-img.c
===================================================================
--- qemu-svn.orig/qemu-img.c
+++ qemu-svn/qemu-img.c
@@ -53,9 +53,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] [-O output_fmt] filename
[filename2 [...]] 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"
@@ -69,6 +69,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:");
@@ -207,7 +208,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) {
@@ -223,6 +224,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;
@@ -258,6 +262,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)
@@ -386,7 +392,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) {
@@ -405,6 +411,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;
@@ -436,6 +445,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)
Index: qemu-svn/block_int.h
===================================================================
--- qemu-svn.orig/block_int.h
+++ qemu-svn/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;
- [Qemu-devel] [PATCH] qemu-img: Create SCSI VMDK disks,
Kevin Wolf <=