At Tue, 17 May 2011 13:22:47 +0900, igoigo246 wrote: > Thx > > I try this operation. > Operation successful. > > but qemu-1.4.1 can't patched. > > Attached please find a patch. > > if possible this patch commit upstream. > > thx for reading.
I've sent the patch to the qemu mainline. The patched version is also available at: git://sheepdog.git.sourceforge.net/gitroot/sheepdog/qemu iscsi See also https://sourceforge.net/apps/trac/sheepdog/wiki/General%20Protocol%20Support Thanks, Kazutaka > > > > > > 2011-05-16 (月) の 18:28 +0900 に MORITA Kazutaka さんは書きました: > > At Mon, 16 May 2011 15:20:55 +0900, > > igoigo246 wrote: > > > > > > For example > > > > > > qemu-img create sheepdog:Device 10G OK. > > > > > > But I want to Pararel Distributed Block Device. > > > > > > SheepDog are two possibilities that qemu-img and pararel distributed > > > blocking device. > > > > > > Please make linux client for SheepDog. > > > > Currently, there is no direct support for any client other than QEMU, > > but there are some means to export Sheepdog volumes using more general > > protocols. > > > > - iSCSI > > 1. Apply a patch to support data preallocation: > > http://lists.wpkg.org/pipermail/sheepdog/2010-October/000706.html > > > > 2. Create a image with data preallocation. > > $ qemu-img create sheepdog:image -o preallocation=data 1G > > > > 3. Install iSCSI target daemon (tgt) with Sheepdog support > > $ git clone > > git://git.kernel.org/pub/scm/linux/kernel/git/tomo/tgt.git -b sheepdog > > $ cd tgt > > $ make > > # make install > > > > 4. Setup tgt > > # tgtd > > # tgtadm --op new --mode target --tid 1 --lld iscsi -T > > iqn.2001-04.com.example:storage.sr.rose.sys1.xyz > > # tgtadm --op new --mode logicalunit --tid 1 --lun 1 -b image > > --bstype sheepdog > > > > See also > > http://www.mail-archive.com/[email protected]/msg00679.html > > > > - NBD > > 1. Create a Sheepdog image > > $ qemu-img create sheepdog:image 4G > > > > 2. Start qemu-nbd on the one of Sheepdog servers > > $ qemu-nbd sheepdog:image > > > > The image is exported on port 10809 > > > > > > Thanks, > > > > Kazutaka > > [2 qemu.patch <text/x-patch; UTF-8 (7bit)>] > diff -Nru qemu.org/block/sheepdog.c qemu/block/sheepdog.c > --- qemu.org/block/sheepdog.c 2011-05-16 20:31:15.000000000 +0900 > +++ qemu/block/sheepdog.c 2011-05-16 20:39:46.000000000 +0900 > @@ -1292,12 +1292,65 @@ > return 0; > } > > +static int sd_prealloc(uint32_t vid, int64_t vdi_size) > +{ > + int fd, ret; > + SheepdogInode *inode; > + char *buf; > + unsigned long idx, max_idx; > + > + fd = connect_to_sdog(NULL, NULL); > + if (fd < 0) { > + return -EIO; > + } > + > + inode = qemu_malloc(sizeof(*inode)); > + buf = qemu_malloc(SD_DATA_OBJ_SIZE); > + > + ret = read_object(fd, (char *)inode, vid_to_vdi_oid(vid), > + 0, sizeof(*inode), 0); > + > + max_idx = (vdi_size + SD_DATA_OBJ_SIZE - 1) / SD_DATA_OBJ_SIZE; > + > + for (idx = 0; idx < max_idx; idx++) { > + uint64_t oid; > + oid = vid_to_data_oid(vid, idx); > + > + if (inode->data_vdi_id[idx]) { > + ret = read_object(fd, buf, > vid_to_vdi_oid(inode->data_vdi_id[idx]), > + 1, SD_DATA_OBJ_SIZE, 0); > + if (ret) > + goto out; > + } else { > + memset(buf, 0, SD_DATA_OBJ_SIZE); > + } > + > + ret = write_object(fd, buf, oid, 1, SD_DATA_OBJ_SIZE, 0, 1); > + if (ret) > + goto out; > + > + inode->data_vdi_id[idx] = vid; > + ret = write_object(fd, (char *)inode, vid_to_vdi_oid(vid), > + 1, sizeof(*inode), 0, 0); > + if (ret) > + goto out; > + } > +out: > + free(inode); > + free(buf); > + closesocket(fd); > + > + return ret; > +} > + > + > static int sd_create(const char *filename, QEMUOptionParameter *options) > { > int ret; > uint32_t vid = 0, base_vid = 0; > int64_t vdi_size = 0; > char *backing_file = NULL; > + int prealloc = 0; > BDRVSheepdogState s; > char vdi[SD_MAX_VDI_LEN], tag[SD_MAX_VDI_TAG_LEN]; > uint32_t snapid; > @@ -1317,7 +1370,18 @@ > vdi_size = options->value.n; > } else if (!strcmp(options->name, BLOCK_OPT_BACKING_FILE)) { > backing_file = options->value.s; > - } > + } else if (!strcmp(options->name, BLOCK_OPT_PREALLOC)) { > + if (!options->value.s || !strcmp(options->value.s, "off")) { > + prealloc = 0; > + } else if (!strcmp(options->value.s, "data")) { > + prealloc = 1; > + } else { > + error_report("Invalid preallocation mode: '%s'\n", > + options->value.s); > + return -EINVAL; > + } > + > + } > options++; > } > > @@ -1353,8 +1417,12 @@ > base_vid = s->inode.vdi_id; > bdrv_delete(bs); > } > + ret = do_sd_create((char *)filename, vdi_size, base_vid, &vid, 0, NULL, > NULL); > + if (!prealloc || ret) > + return ret; > + > + return sd_prealloc(vid, vdi_size); > > - return do_sd_create((char *)vdi, vdi_size, base_vid, &vid, 0, s.addr, > s.port); > } > > static void sd_close(BlockDriverState *bs) > @@ -1990,6 +2058,11 @@ > .type = OPT_STRING, > .help = "File name of a base image" > }, > + { > + .name = BLOCK_OPT_PREALLOC, > + .type = OPT_STRING, > + .help = "Preallocation mode (allowed values: off, data)" > + }, > { NULL } > }; > > [3 <text/plain; us-ascii (7bit)>] > -- > sheepdog mailing list > [email protected] > http://lists.wpkg.org/mailman/listinfo/sheepdog -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
