X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=java%2Fexamples%2FCreateDisk.java;fp=java%2Fexamples%2FCreateDisk.java;h=4742b5a1602381e96ed918e380207f31ecaeaf86;hp=0000000000000000000000000000000000000000;hb=d025e91f6751505c70b7b5f492ee72c67e274ecf;hpb=a548c9668315844763456c15e89e35e9702b851a diff --git a/java/examples/CreateDisk.java b/java/examples/CreateDisk.java new file mode 100644 index 0000000..4742b5a --- /dev/null +++ b/java/examples/CreateDisk.java @@ -0,0 +1,87 @@ +// Example showing how to create a disk image. + +import java.io.*; +import java.util.Map; +import java.util.HashMap; +import com.redhat.et.libguestfs.*; + +public class CreateDisk +{ + static String output = "disk.img"; + + public static void main (String[] argv) + { + try { + GuestFS g = new GuestFS (); + + // Create a raw-format sparse disk image, 512 MB in size. + RandomAccessFile f = new RandomAccessFile (output, "rw"); + f.setLength (512 * 1024 * 1024); + f.close (); + + // Set the trace flag so that we can see each libguestfs call. + g.set_trace (true); + + // Set the autosync flag so that the disk will be synchronized + // automatically when the libguestfs handle is closed. + g.set_autosync (true); + + // Attach the disk image to libguestfs. + Map optargs = new HashMap() { + { + put ("format", "raw"); + put ("readonly", Boolean.FALSE); + } + }; + g.add_drive_opts (output, optargs); + + // Run the libguestfs back-end. + g.launch (); + + // Get the list of devices. Because we only added one drive + // above, we expect that this list should contain a single + // element. + String[] devices = g.list_devices (); + if (devices.length != 1) + throw new Error ("expected a single device from list-devices"); + + // Partition the disk as one single MBR partition. + g.part_disk (devices[0], "mbr"); + + // Get the list of partitions. We expect a single element, which + // is the partition we have just created. + String[] partitions = g.list_partitions (); + if (partitions.length != 1) + throw new Error ("expected a single partition from list-partitions"); + + // Create a filesystem on the partition. + g.mkfs ("ext4", partitions[0]); + + // Now mount the filesystem so that we can add files. + g.mount_options ("", partitions[0], "/"); + + // Create some files and directories. + g.touch ("/empty"); + String message = "Hello, world\n"; + g.write ("/hello", message.getBytes()); + g.mkdir ("/foo"); + + // This one uploads the local file /etc/resolv.conf into + // the disk image. + g.upload ("/etc/resolv.conf", "/foo/resolv.conf"); + + // Because 'autosync' was set (above) we can just close the handle + // and the disk contents will be synchronized. You can also do + // this manually by calling g#umount_all and g#sync. + // + // Note also that handles are automatically closed if they are + // reaped by the garbage collector. You only need to call close + // if you want to close the handle right away. + g.close (); + } + catch (Exception exn) { + System.err.println (exn); + System.exit (1); + } + } +}