summaryrefslogtreecommitdiffstats
path: root/daemon/ext2.c
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2009-08-15 18:03:21 +0100
committerRichard W.M. Jones <rjones@redhat.com>2009-08-15 18:05:07 +0100
commita61bccecfba1c9501910d28de24bac945e95001f (patch)
tree543a5eb684f9a230565ac47b68e12cbdf163cec6 /daemon/ext2.c
parentda54ae6abbd840e28c294949bc796a231f050d6d (diff)
downloadlibguestfs-a61bccecfba1c9501910d28de24bac945e95001f.tar.gz
libguestfs-a61bccecfba1c9501910d28de24bac945e95001f.tar.xz
libguestfs-a61bccecfba1c9501910d28de24bac945e95001f.zip
New commands: mkfs-b, mke2journal*, mke2fs-J*
mkfs-b: Pass the -b (blocksize) parameter to mkfs. mke2journal and friends: Lets you create external ext2 journals on devices. mke2fs-J and friends: Lets you create ext2/3/4 filesystems with external journals.
Diffstat (limited to 'daemon/ext2.c')
-rw-r--r--daemon/ext2.c149
1 files changed, 149 insertions, 0 deletions
diff --git a/daemon/ext2.c b/daemon/ext2.c
index f181b8d7..2603ed06 100644
--- a/daemon/ext2.c
+++ b/daemon/ext2.c
@@ -266,3 +266,152 @@ do_e2fsck_f (const char *device)
free (err);
return 0;
}
+
+int
+do_mke2journal (int blocksize, const char *device)
+{
+ char *err;
+ int r;
+
+ char blocksize_s[32];
+ snprintf (blocksize_s, sizeof blocksize_s, "%d", blocksize);
+
+ r = command (NULL, &err,
+ "/sbin/mke2fs", "-O", "journal_dev", "-b", blocksize_s,
+ device, NULL);
+ if (r == -1) {
+ reply_with_error ("mke2journal: %s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ return 0;
+}
+
+int
+do_mke2journal_L (int blocksize, const char *label, const char *device)
+{
+ char *err;
+ int r;
+
+ char blocksize_s[32];
+ snprintf (blocksize_s, sizeof blocksize_s, "%d", blocksize);
+
+ r = command (NULL, &err,
+ "/sbin/mke2fs", "-O", "journal_dev", "-b", blocksize_s,
+ "-L", label,
+ device, NULL);
+ if (r == -1) {
+ reply_with_error ("mke2journal_L: %s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ return 0;
+}
+
+int
+do_mke2journal_U (int blocksize, const char *uuid, const char *device)
+{
+ char *err;
+ int r;
+
+ char blocksize_s[32];
+ snprintf (blocksize_s, sizeof blocksize_s, "%d", blocksize);
+
+ r = command (NULL, &err,
+ "/sbin/mke2fs", "-O", "journal_dev", "-b", blocksize_s,
+ "-U", uuid,
+ device, NULL);
+ if (r == -1) {
+ reply_with_error ("mke2journal_U: %s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ return 0;
+}
+
+int
+do_mke2fs_J (const char *fstype, int blocksize, const char *device,
+ const char *journal)
+{
+ char *err;
+ int r;
+
+ char blocksize_s[32];
+ snprintf (blocksize_s, sizeof blocksize_s, "%d", blocksize);
+
+ int len = strlen (journal);
+ char jdev[len+32];
+ snprintf (jdev, len+32, "device=%s", journal);
+
+ r = command (NULL, &err,
+ "/sbin/mke2fs", "-t", fstype, "-J", jdev, "-b", blocksize_s,
+ device, NULL);
+ if (r == -1) {
+ reply_with_error ("mke2fs_J: %s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ return 0;
+}
+
+int
+do_mke2fs_JL (const char *fstype, int blocksize, const char *device,
+ const char *label)
+{
+ char *err;
+ int r;
+
+ char blocksize_s[32];
+ snprintf (blocksize_s, sizeof blocksize_s, "%d", blocksize);
+
+ int len = strlen (label);
+ char jdev[len+32];
+ snprintf (jdev, len+32, "device=LABEL=%s", label);
+
+ r = command (NULL, &err,
+ "/sbin/mke2fs", "-t", fstype, "-J", jdev, "-b", blocksize_s,
+ device, NULL);
+ if (r == -1) {
+ reply_with_error ("mke2fs_JL: %s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ return 0;
+}
+
+int
+do_mke2fs_JU (const char *fstype, int blocksize, const char *device,
+ const char *uuid)
+{
+ char *err;
+ int r;
+
+ char blocksize_s[32];
+ snprintf (blocksize_s, sizeof blocksize_s, "%d", blocksize);
+
+ int len = strlen (uuid);
+ char jdev[len+32];
+ snprintf (jdev, len+32, "device=UUID=%s", uuid);
+
+ r = command (NULL, &err,
+ "/sbin/mke2fs", "-t", fstype, "-J", jdev, "-b", blocksize_s,
+ device, NULL);
+ if (r == -1) {
+ reply_with_error ("mke2fs_JU: %s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+ return 0;
+}