-----Original Message-----
From: libguestfs-bounces(a)redhat.com [mailto:libguestfs-bounces@redhat.com] On
Behalf Of Pino Toscano
Sent: Tuesday, June 23, 2015 5:50 PM
To: libguestfs(a)redhat.com
Subject: Re: [Libguestfs] [PATCH] uuid: add support to change uuid of btrfs partition
Hi,
In data martedì 23 giugno 2015 15:59:19, Chen Hanxiao ha scritto:
> btrfs-progs v4.1 add support to change uuid of btrfs fs.
This needs to support older btrfs-progs versions though, so run
btrfstune to check whether it has the -U parameter, and if not return
the old error message. Something like test_btrfs_device_add_needs_force
for example.
Sure.
Also:
$ btrfs --version
btrfs-progs v4.0
$ btrfstune --help
btrfstune: invalid option -- '-'
usage: btrfstune [options] device
-S value positive value will enable seeding, zero to disable, negative
is not allowed
-r enable extended inode refs
-x enable skinny metadata extent refs
-f force to set or clear flags, make sure that you are aware of
the dangers
Would be cool if btrfs tools would support -h/--help, so it is not
considered an error (i.e. exiting with 1).
Unfortunately they don't have.
I've talked to my colleagues, he said that this may be added if he had time.
If I had time, I'll send a btrfs-progs patch for it.
Also, for back compact, we may still use the old method as we did in daemon/btrfs.c.
>
> Signed-off-by: Chen Hanxiao <chenhanxiao(a)cn.fujitsu.com>
> ---
> daemon/uuids.c | 19 +++++++++++++++++--
> generator/actions.ml | 4 ++++
> 2 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/daemon/uuids.c b/daemon/uuids.c
> index 06b33e9..c18cb55 100644
> --- a/daemon/uuids.c
> +++ b/daemon/uuids.c
> @@ -30,6 +30,7 @@
> GUESTFSD_EXT_CMD(str_tune2fs, tune2fs);
> GUESTFSD_EXT_CMD(str_xfs_admin, xfs_admin);
> GUESTFSD_EXT_CMD(str_swaplabel, swaplabel);
> +GUESTFSD_EXT_CMD(str_btrfstune, btrfstune);
>
> static int
> e2uuid (const char *device, const char *uuid)
> @@ -91,6 +92,21 @@ swapuuid (const char *device, const char *uuid)
> return 0;
> }
>
> +static int
> +btrfsuuid (const char *device, const char *uuid)
> +{
> + int r;
> + CLEANUP_FREE char *err = NULL;
> +
> + r = command (NULL, &err, str_btrfstune, "-f", "-U", uuid,
device, NULL);
> + if (r == -1) {
> + reply_with_error ("%s", err);
> + return -1;
> + }
> +
> + return 0;
> +}
While other uuid methods are currently here in uuids.c, IMHO they would
better fit together with their filesystem implementations. Similar to
what I did with 6db3c100 and 8ad667f1 for labels.
That sounds good.
Like other XXuuid in uuids.c, it's a simple function.
Or maybe we could do the same thing to other XXuuid.
> int
> do_set_uuid (const char *device, const char *uuid)
> {
> @@ -111,8 +127,7 @@ do_set_uuid (const char *device, const char *uuid)
> r = swapuuid (device, uuid);
>
> else if (STREQ (vfs_type, "btrfs")) {
> - reply_with_error ("btrfs filesystems' UUID cannot be changed");
> - r = -1;
> + r = btrfsuuid (device, uuid);
> }
>
> else {
> diff --git a/generator/actions.ml b/generator/actions.ml
> index d5e5ccf..ca77c87 100644
> --- a/generator/actions.ml
> +++ b/generator/actions.ml
> @@ -11774,6 +11774,10 @@ parameter. In future we may allow other flags to be
adjusted." };
> InitBasicFS, Always, TestResultString (
> [["set_uuid"; "/dev/sda1"; uuid];
> ["vfs_uuid"; "/dev/sda1"]], uuid), [];
> + InitPartition, Always, TestResultString (
> + [["mkfs_btrfs"; "/dev/sda1"; "";
""; "NOARG"; ""; "NOARG"; "NOARG";
""; ""];
> + ["set_uuid"; "/dev/sda1"; uuid];
> + ["vfs_uuid"; "/dev/sda1"]], uuid), [];
Unfortunately this cannot be added, as it will fail with
btrfs-progs < 4.1. My suggestion is to add a simple shell test in
tests/btrfs, which would create a simple btrfs fs, try to change the
UUID and check that it either returned the old error message, or that
it succeeded.
Thanks for your comments. Will do in v2.
Regards,
- Chen
Thanks,
--
Pino Toscano
_______________________________________________
Libguestfs mailing list
Libguestfs(a)redhat.com
https://www.redhat.com/mailman/listinfo/libguestfs