Add the new api zero_fs to erase the filesystem signatures
on a device but now erase any data.
Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com>
---
daemon/zero.c | 17 +++++++++++++++++
generator/generator_actions.ml | 14 ++++++++++++++
src/MAX_PROC_NR | 2 +-
3 files changed, 32 insertions(+), 1 deletions(-)
diff --git a/daemon/zero.c b/daemon/zero.c
index 398f844..348869f 100644
--- a/daemon/zero.c
+++ b/daemon/zero.c
@@ -73,6 +73,23 @@ do_zero (const char *device)
}
int
+do_zero_fs (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 3a7be79..d27ef43 100644
--- a/generator/generator_actions.ml
+++ b/generator/generator_actions.ml
@@ -6651,6 +6651,20 @@ This option may not be specified at the same time as the
C<correct> option.
=back");
+ ("zero_fs", (RErr, [Device "device"], []), 305,
[Progress],
+ [InitBasicFSonLVM, Always, TestRun (
+ [["zero_fs"; "/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_zero_fs>
+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 873b744..67d04b9 100644
--- a/src/MAX_PROC_NR
+++ b/src/MAX_PROC_NR
@@ -1 +1 @@
-304
+305
--
1.7.9
Wanlong Gao
2012-Feb-06 08:17 UTC
[Libguestfs] [PATCH 2/3] 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..3adb639 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_zero_fs (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
fix coding style to be consistent with others.
Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com>
---
daemon/md.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/daemon/md.c b/daemon/md.c
index 41e2c75..5432213 100644
--- a/daemon/md.c
+++ b/daemon/md.c
@@ -244,7 +244,7 @@ do_md_detail(const char *md)
char **ret = NULL;
int size = 0, alloc = 0;
- const char *mdadm[] = { "mdadm", "-D",
"--export", md, NULL };
+ const char *mdadm[] = {"mdadm", "-D",
"--export", md, NULL };
r = commandv (&out, &err, mdadm);
if (r == -1) {
reply_with_error ("%s", err);
@@ -315,16 +315,16 @@ error:
}
int
-do_md_stop(const char *md)
+do_md_stop (const char *md)
{
int r;
char *err = NULL;
- const char *mdadm[] = { "mdadm", "--stop", md, NULL};
- r = commandv(NULL, &err, mdadm);
+ const char *mdadm[] = {"mdadm", "--stop", md, NULL};
+ r = commandv (NULL, &err, mdadm);
if (r == -1) {
- reply_with_error("%s", err);
- free(err);
+ reply_with_error ("%s", err);
+ free (err);
return -1;
}
free (err);
--
1.7.9
Richard W.M. Jones
2012-Feb-06 08:26 UTC
[Libguestfs] [PATCH 1/3] NEW API: add a new api zero_fs
On Mon, Feb 06, 2012 at 04:17:05PM +0800, Wanlong Gao wrote:> Add the new api zero_fs to erase the filesystem signatures > on a device but now erase any data. > > Signed-off-by: Wanlong Gao <gaowanlong at cn.fujitsu.com> > --- > daemon/zero.c | 17 +++++++++++++++++ > generator/generator_actions.ml | 14 ++++++++++++++ > src/MAX_PROC_NR | 2 +- > 3 files changed, 32 insertions(+), 1 deletions(-) > > diff --git a/daemon/zero.c b/daemon/zero.c > index 398f844..348869f 100644 > --- a/daemon/zero.c > +++ b/daemon/zero.c > @@ -73,6 +73,23 @@ do_zero (const char *device) > } > > int > +do_zero_fs (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 3a7be79..d27ef43 100644 > --- a/generator/generator_actions.ml > +++ b/generator/generator_actions.ml > @@ -6651,6 +6651,20 @@ This option may not be specified at the same time as the C<correct> option. > > =back"); > > + ("zero_fs", (RErr, [Device "device"], []), 305, [Progress], > + [InitBasicFSonLVM, Always, TestRun ( > + [["zero_fs"; "/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_zero_fs> > +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 873b744..67d04b9 100644 > --- a/src/MAX_PROC_NR > +++ b/src/MAX_PROC_NR > @@ -1 +1 @@ > -304 > +305Ah, wipefs, I think this is a good idea, and it's been on the TODO list for a long time. What do people think about calling the API 'wipefs' instead of 'zero-fs'? Can you update the patch to remove the reference to wipefs in the TODO file? Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones libguestfs lets you edit virtual machines. Supports shell scripting, bindings from many languages. http://libguestfs.org