diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2009-08-15 18:03:21 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2009-08-15 18:05:07 +0100 |
commit | a61bccecfba1c9501910d28de24bac945e95001f (patch) | |
tree | 543a5eb684f9a230565ac47b68e12cbdf163cec6 /daemon/ext2.c | |
parent | da54ae6abbd840e28c294949bc796a231f050d6d (diff) | |
download | libguestfs-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.c | 149 |
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; +} |