On Sat, Jul 29, 2017 at 08:51:04PM +0300, Nikos Skalkotos wrote:
This can be used to enlarge or shrink an existing partition.
---
daemon/parted.c | 31 +++++++++++++++++++++++++++++++
generator/actions_core.ml | 22 ++++++++++++++++++++++
generator/proc_nr.ml | 1 +
lib/MAX_PROC_NR | 2 +-
4 files changed, 55 insertions(+), 1 deletion(-)
diff --git a/daemon/parted.c b/daemon/parted.c
index 72e1b8420..f1205cadf 100644
--- a/daemon/parted.c
+++ b/daemon/parted.c
@@ -178,6 +178,37 @@ do_part_del (const char *device, int partnum)
}
int
+do_part_resize (const char *device, int partnum, int64_t endsect)
+{
+ int r;
+ CLEANUP_FREE char *err = NULL;
+ char endstr[32];
+ char partnum_str[16];
+
+ if (partnum <= 0) {
+ reply_with_error ("partition number must be >= 1");
+ return -1;
+ }
+
+ snprintf (partnum_str, sizeof partnum_str, "%d", partnum);
+ snprintf (endstr, sizeof endstr, "%" PRIi64 "s", endsect);
+
+ udev_settle ();
+
+ r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR,
+ "parted", "-s", "--", device,
"resizepart", partnum_str,
+ endstr, NULL);
+ if (r == -1) {
+ reply_with_error ("parted: %s: %s:", device, err);
+ return -1;
+ }
+
+ udev_settle();
+
+ return 0;
+}
+
+int
do_part_disk (const char *device, const char *parttype)
{
int r;
diff --git a/generator/actions_core.ml b/generator/actions_core.ml
index ea0735676..939aec7ee 100644
--- a/generator/actions_core.ml
+++ b/generator/actions_core.ml
@@ -9646,4 +9646,26 @@ be mountable but require special options. Filesystems may
not all belong to a single logical operating system
(use C<guestfs_inspect_os> to look for OSes)." };
+ { defaults with
+ name = "part_resize"; added = (1, 37, 20);
+ style = RErr, [String (Device, "device"); Int "partnum"; Int64
"endsect"], [];
+ tests = [
+ InitEmpty, Always, TestRun (
+ [["part_init"; "/dev/sda"; "mbr"];
+ ["part_add"; "/dev/sda"; "primary";
"1"; "-1025"];
+ ["part_resize"; "/dev/sda"; "1";
"-1"]]), []
+ ];
+ shortdesc = "resize a partition";
+ longdesc = "\
+This command resizes the partition numbered C<partnum> on C<device>
+by moving the end position.
+
+Note that this does not modify any filesystem present in the partition.
+If you wish to do this, you will need to use filesystem resizing
+commands like C<guestfs_resize2fs>.
+
+When growing a partition you will want to grow the filesystem
+afterwards, but when shrinking, you need to shrink the filesystem
+before the partition." };
+
]
diff --git a/generator/proc_nr.ml b/generator/proc_nr.ml
index dec02f5fa..7895063b6 100644
--- a/generator/proc_nr.ml
+++ b/generator/proc_nr.ml
@@ -484,6 +484,7 @@ let proc_nr = [
474, "internal_yara_scan";
475, "file_architecture";
476, "list_filesystems";
+477, "part_resize";
]
(* End of list. If adding a new entry, add it at the end of the list
diff --git a/lib/MAX_PROC_NR b/lib/MAX_PROC_NR
index b86395733..bf2c10d23 100644
--- a/lib/MAX_PROC_NR
+++ b/lib/MAX_PROC_NR
@@ -1 +1 @@
-476
+477
Looks fine to me, ACK.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
libguestfs lets you edit virtual machines. Supports shell scripting,
bindings from many languages.
http://libguestfs.org