Hi Rich: This is a latest patch. ;-P Comments? Thanks -Wanlong Gao Wanlong Gao (2): NEW API: add a new api wipefs virt-format: erase the filesystem signatures before erase partitions TODO | 2 -- daemon/zero.c | 17 +++++++++++++++++ format/format.c | 19 ++++--------------- generator/generator_actions.ml | 14 ++++++++++++++ src/MAX_PROC_NR | 2 +- 5 files changed, 36 insertions(+), 18 deletions(-) -- 1.7.9
Wanlong Gao
2012-Feb-10 09:10 UTC
[Libguestfs] [PATCH-v4 1/2] NEW API: add a new api wipefs
Add the new api wipefs to erase the filesystem signatures on a device but now erase any data. Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com> --- TODO | 2 -- daemon/zero.c | 24 ++++++++++++++++++++++++ generator/generator_actions.ml | 14 ++++++++++++++ src/MAX_PROC_NR | 2 +- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/TODO b/TODO index 3adb740..b9a4ee9 100644 --- a/TODO +++ b/TODO @@ -318,8 +318,6 @@ Display the structure of an image file as a PS. Greater use of blkid / libblkid ------------------------------- -guestfs_zero should use wipefs. See wipefs(8). - There are various useful functions in libblkid for listing partitions, devices etc which we are essentially duplicating in the daemon. It would make more sense to just use libblkid for this. diff --git a/daemon/zero.c b/daemon/zero.c index 398f844..00badd2 100644 --- a/daemon/zero.c +++ b/daemon/zero.c @@ -73,6 +73,30 @@ do_zero (const char *device) } int +optgroup_wipefs_available (void) +{ + return prog_exists ("wipefs"); +} + +int +do_wipefs (const char *device) +{ + int r; + char *err = NULL; + + const char *wipefs[] = {"wipefs", "-a", device, NULL}; + r = commandv (NULL, &err, wipefs); + if (r == -1) { + reply_with_error ("%s", err); + free (err); + return -1; + } + + free (err); + return 0; +} + +int do_zero_device (const char *device) { int64_t ssize = do_blockdev_getsize64 (device); diff --git a/generator/generator_actions.ml b/generator/generator_actions.ml index f9ba5c3..ad5abd9 100644 --- a/generator/generator_actions.ml +++ b/generator/generator_actions.ml @@ -6660,6 +6660,20 @@ List the files in C<directory> in the format of 'ls -laZ'. This command is mostly useful for interactive sessions. It is I<not> intended that you try to parse the output string."); + ("wipefs", (RErr, [Device "device"], []), 306, [Optional "wipefs"], + [InitBasicFSonLVM, Always, TestRun ( + [["wipefs"; "/dev/VG/LV"]])], + "wipe a filesystem signature from a device", + "\ +This command can erase filesystem or raid signatures (magic strings) from +the specified C<device> to make the filesystem invisible for libblkid. +This does not erase the filesystem itself nor any other data from the C<device>. +Compare with C<guestfs_zero> which just zeroes the first few blocks of a +device, contained the partitions on the device, but this C<guestfs_wipefs> +can't erase the partitions of a device. + +=back"); + ] let all_functions = non_daemon_functions @ daemon_functions diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR index 67d04b9..cd30709 100644 --- a/src/MAX_PROC_NR +++ b/src/MAX_PROC_NR @@ -1 +1 @@ -305 +306 -- 1.7.9
Wanlong Gao
2012-Feb-10 09:10 UTC
[Libguestfs] [PATCH-v4 2/2] virt-format: erase the filesystem signatures before erase partitions
erase the filesystem signatures on each device, then erase the partitions, avoid to list all the partitions here. Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com> --- format/format.c | 19 ++++--------------- 1 files changed, 4 insertions(+), 15 deletions(-) diff --git a/format/format.c b/format/format.c index b3a47cd..6799fd4 100644 --- a/format/format.c +++ b/format/format.c @@ -323,22 +323,11 @@ do_format (void) /* Erase the disks. */ if (!wipe) { - char **parts; - - /* No wipe, but get rid of LVM metadata by erasing each partition. */ - parts = guestfs_list_partitions (g); - if (parts == NULL) - exit (EXIT_FAILURE); - - for (i = 0; parts[i] != NULL; ++i) { - if (guestfs_zero (g, parts[i]) == -1) - exit (EXIT_FAILURE); - free (parts[i]); - } - free (parts); - - /* Then erase the partition table on each device. */ for (i = 0; devices[i] != NULL; ++i) { + /* erase the filesystem signatures on each device */ + if (guestfs_wipefs (g, devices[i]) == -1) + exit (EXIT_FAILURE); + /* Then erase the partition table on each device. */ if (guestfs_zero (g, devices[i]) == -1) exit (EXIT_FAILURE); } -- 1.7.9
On Fri, Feb 10, 2012 at 05:10:01PM +0800, Wanlong Gao wrote:> > Hi Rich: > This is a latest patch. ;-P > Comments?Thanks. I've ACKed and pushed both patches. I made some small adjustments to the documentation of wipefs. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://et.redhat.com/~rjones/virt-df/