linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* How to change BTRFS filesystem UUID
@ 2015-12-27 14:31 Jiri Kanicky
  2015-12-27 14:45 ` Hugo Mills
  2015-12-27 14:48 ` Holger Hoffstätte
  0 siblings, 2 replies; 9+ messages in thread
From: Jiri Kanicky @ 2015-12-27 14:31 UTC (permalink / raw)
  To: linux-btrfs

Hi,

I cloned several machines from the same disk and they all have same 
BTRFS filesystem UUID. I need to recovery one disk from failure, but if 
I attach two disks to the same machine, both disks have the same ID.

This seem to confuse UDEV, because /dev/disk/by-uuid seem to show just 
one link, not two links to two disks.

Is there a way to change the BTRFS ID (generate new one) that I can 
differentiate between the two disks on one host?

Thank you
Jiri


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to change BTRFS filesystem UUID
  2015-12-27 14:31 How to change BTRFS filesystem UUID Jiri Kanicky
@ 2015-12-27 14:45 ` Hugo Mills
  2015-12-27 15:27   ` Jiri Kanicky
  2015-12-27 14:48 ` Holger Hoffstätte
  1 sibling, 1 reply; 9+ messages in thread
From: Hugo Mills @ 2015-12-27 14:45 UTC (permalink / raw)
  To: Jiri Kanicky; +Cc: linux-btrfs

[-- Attachment #1: Type: text/plain, Size: 839 bytes --]

On Mon, Dec 28, 2015 at 01:31:26AM +1100, Jiri Kanicky wrote:
> Hi,
> 
> I cloned several machines from the same disk and they all have same
> BTRFS filesystem UUID. I need to recovery one disk from failure, but
> if I attach two disks to the same machine, both disks have the same
> ID.
> 
> This seem to confuse UDEV, because /dev/disk/by-uuid seem to show
> just one link, not two links to two disks.
> 
> Is there a way to change the BTRFS ID (generate new one) that I can
> differentiate between the two disks on one host?

   btrfstune, with -u or -U

   Hugo.

-- 
Hugo Mills             | I think that everything darkling says is actually a
hugo@... carfax.org.uk | joke. It's just that we haven't worked out most of
http://carfax.org.uk/  | them yet.
PGP: E2AB1DE4          |                                                Vashka

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to change BTRFS filesystem UUID
  2015-12-27 14:31 How to change BTRFS filesystem UUID Jiri Kanicky
  2015-12-27 14:45 ` Hugo Mills
@ 2015-12-27 14:48 ` Holger Hoffstätte
  1 sibling, 0 replies; 9+ messages in thread
From: Holger Hoffstätte @ 2015-12-27 14:48 UTC (permalink / raw)
  To: Jiri Kanicky, linux-btrfs

On 12/27/15 15:31, Jiri Kanicky wrote:
> Is there a way to change the BTRFS ID (generate new one) that I can
> differentiate between the two disks on one host?

btrfstune:

    -u
       Change fsid to a randomly generated UUID or continue previous
       fsid change operation in case it was interrupted.

should do what you need.

-h

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to change BTRFS filesystem UUID
  2015-12-27 14:45 ` Hugo Mills
@ 2015-12-27 15:27   ` Jiri Kanicky
  2015-12-27 23:01     ` Christoph Anton Mitterer
  0 siblings, 1 reply; 9+ messages in thread
From: Jiri Kanicky @ 2015-12-27 15:27 UTC (permalink / raw)
  To: Hugo Mills, linux-btrfs

Hi,

Thanks for the reply. Looks like I will have o use some newer distro. 
Debian Jessie rescue CD does not seem to have this. Anyway, i will play 
with this.

Thank you Jiri

On 28/12/2015 1:45 AM, Hugo Mills wrote:
> On Mon, Dec 28, 2015 at 01:31:26AM +1100, Jiri Kanicky wrote:
>> Hi,
>>
>> I cloned several machines from the same disk and they all have same
>> BTRFS filesystem UUID. I need to recovery one disk from failure, but
>> if I attach two disks to the same machine, both disks have the same
>> ID.
>>
>> This seem to confuse UDEV, because /dev/disk/by-uuid seem to show
>> just one link, not two links to two disks.
>>
>> Is there a way to change the BTRFS ID (generate new one) that I can
>> differentiate between the two disks on one host?
>     btrfstune, with -u or -U
>
>     Hugo.
>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to change BTRFS filesystem UUID
  2015-12-27 15:27   ` Jiri Kanicky
@ 2015-12-27 23:01     ` Christoph Anton Mitterer
  2015-12-27 23:13       ` Hugo Mills
  0 siblings, 1 reply; 9+ messages in thread
From: Christoph Anton Mitterer @ 2015-12-27 23:01 UTC (permalink / raw)
  To: Jiri Kanicky, Hugo Mills, linux-btrfs

[-- Attachment #1: Type: text/plain, Size: 626 bytes --]

On Mon, 2015-12-28 at 02:27 +1100, Jiri Kanicky wrote:
> Thanks for the reply. Looks like I will have o use some newer
> distro. 
As it was already said... btrfs may even corrupt your filesystem if
colliding UUIDs are "seen".

At least to me it's currently unclear what "seen" exactly means...
actually trying a mount, or already when just a device with colliding
IDs appear.

So whenever you do your recovery works, make sure that there's never a
moment where more than one btrfs block device appears with the same
UUID.
Even when it's just for some seconds it may already cause corruption.


Cheers,
Chris.

[-- Attachment #2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 5313 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to change BTRFS filesystem UUID
  2015-12-27 23:01     ` Christoph Anton Mitterer
@ 2015-12-27 23:13       ` Hugo Mills
  2015-12-28  1:00         ` Duncan
  2015-12-28  2:13         ` Jiri Kanicky
  0 siblings, 2 replies; 9+ messages in thread
From: Hugo Mills @ 2015-12-27 23:13 UTC (permalink / raw)
  To: Christoph Anton Mitterer; +Cc: Jiri Kanicky, linux-btrfs

[-- Attachment #1: Type: text/plain, Size: 1566 bytes --]

On Mon, Dec 28, 2015 at 12:01:39AM +0100, Christoph Anton Mitterer wrote:
> On Mon, 2015-12-28 at 02:27 +1100, Jiri Kanicky wrote:
> > Thanks for the reply. Looks like I will have o use some newer
> > distro. 
> As it was already said... btrfs may even corrupt your filesystem if
> colliding UUIDs are "seen".
> 
> At least to me it's currently unclear what "seen" exactly means...
> actually trying a mount, or already when just a device with colliding
> IDs appear.

   The damage happens on (or after) mount. Until that point there's no
danger.

   The OS (usually udev) will run btfs dev scan when a new block
device is detected, and it tells the kernel that there's a btrfs
filesystem with a particular UUID on a particular block device.

   The kernel uses this information to decide which devices to include
when it assembles a filesystem. If you have two devices where there
should be only one (particularly if the data on the two was similar
but has now diverged), then the kernel can end up writing to one or
other device arbitrarily, possibly having read state from the other
one, and things screw up rather fast.

   Hugo.

> So whenever you do your recovery works, make sure that there's never a
> moment where more than one btrfs block device appears with the same
> UUID.
> Even when it's just for some seconds it may already cause corruption.
> 
> 
> Cheers,
> Chris.



-- 
Hugo Mills             | emacs: Eats Memory and Crashes.
hugo@... carfax.org.uk |
http://carfax.org.uk/  |
PGP: E2AB1DE4          |

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to change BTRFS filesystem UUID
  2015-12-27 23:13       ` Hugo Mills
@ 2015-12-28  1:00         ` Duncan
  2015-12-28  2:13         ` Jiri Kanicky
  1 sibling, 0 replies; 9+ messages in thread
From: Duncan @ 2015-12-28  1:00 UTC (permalink / raw)
  To: linux-btrfs

Hugo Mills posted on Sun, 27 Dec 2015 23:13:03 +0000 as excerpted:

> On Mon, Dec 28, 2015 at 12:01:39AM +0100, Christoph Anton Mitterer
> wrote:
>> On Mon, 2015-12-28 at 02:27 +1100, Jiri Kanicky wrote:
>> > Thanks for the reply. Looks like I will have o use some newer distro.
>> As it was already said... btrfs may even corrupt your filesystem if
>> colliding UUIDs are "seen".
>> 
>> At least to me it's currently unclear what "seen" exactly means...
>> actually trying a mount, or already when just a device with colliding
>> IDs appear.
> 
>    The damage happens on (or after) mount. Until that point there's no
> danger.
> 
>    The OS (usually udev) will run btfs dev scan when a new block
> device is detected, and it tells the kernel that there's a btrfs
> filesystem with a particular UUID on a particular block device.
> 
>    The kernel uses this information to decide which devices to include
> when it assembles a filesystem. If you have two devices where there
> should be only one (particularly if the data on the two was similar but
> has now diverged), then the kernel can end up writing to one or other
> device arbitrarily, possibly having read state from the other one, and
> things screw up rather fast.

This.  (Mostly repeating the above in different words to I'd like 
knowledgeable confirmation on activator 2 below, which is my own.  This 
sort of other-words repetition can help in reinforcing or understanding 
the concepts for some readers, while simply being annoying for others.  
YMMV.)

Two major triggers and an activator.

Triggers:

1) Btrfs device scan is the primary trigger.  Without this, btrfs will 
only know about either the device fed to it the mount command itself, or 
the devices listed in fstab, either in the device field, or as device= 
options.

2) The secondary trigger is often udev, which will normally run btrfs 
device scan automatically (due to udev rules often dropped into place by 
the btrfs-progs package, tho they may be included in the udev package 
itself or generic udev-rules packages in some distros), when the device 
is detected.

As a result of this secondary trigger, the btrfs will often know about 
the device at boot or as soon as it is attached, and it then becomes 
unsafe to have that UUID mounted.  This is where the "seen" comes in, 
with an assumption that a filesystem using that UUID is already mounted, 
and may be damaged as soon as udev triggers btrfs device scan and btrfs 
learns about the newly added device with the same filesystem UUID.

Activator(s):

1) Mount is the usual and primary activator.  Under normal circumstances, 
despite the triggers above if a btrfs with that UUID isn't mounted, no 
damage occurs as btrfs won't be writing to any of the devices containing 
a filesystem with that UUID.

2) Unsure on this one but I _believe_ various other btrfs userspace 
(btrfs-progs) commands that write to the unmounted filesystem either use 
the data provided by btrfs device scan or otherwise do similar scans as 
well.  In particular, btrfs check with --repair or --init-* will have to 
know about the multiple devices in the filesystem to properly do its 
work.  How it actually gets the list of devices is, however, unclear to 
me, tho my own experience with it seems to indicate that it's unnecessary 
to feed all the devices on the commandline and indeed, the manpage shows 
a single device, with no indication that feeding multiple devices on the 
commandline is even supported.  However, these sorts of commands only 
tend to be run very deliberately and under very specific circumstances, 
and thus are unlikely to be run when one is working with multiple images 
of a device that shouldn't be combined into the same filesystem.

-- 
Duncan - List replies preferred.   No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master."  Richard Stallman


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to change BTRFS filesystem UUID
  2015-12-27 23:13       ` Hugo Mills
  2015-12-28  1:00         ` Duncan
@ 2015-12-28  2:13         ` Jiri Kanicky
  2015-12-28  4:35           ` Duncan
  1 sibling, 1 reply; 9+ messages in thread
From: Jiri Kanicky @ 2015-12-28  2:13 UTC (permalink / raw)
  To: Hugo Mills, Christoph Anton Mitterer, linux-btrfs

Hi,

Thanks for the detailed information. The data were not corrupted, so I 
could copy them to a new BTRFS partition.

Here is what happened exactly.

VM with BTRFS filesystem running on XenServer. The VM disk is a VHD 
stored on NFS storage. NFS storage ran out of space, and I found the 
BTRFS in RO mode. I could not remount it as RW after increasing the 
storage space. I rebooted the VM and the VM was not able to boot 
anymore. There were many lines during boot reporting "btrfs open_ctree 
failed" and the boot ended up in dracut mode.

I booted from CD and find out that I can mount the BTRFS filesystem and 
all data are there.

I created a new disk with BTRFS filesystem, copied all the data on it, 
and that new disk booted fine. (I actually used a disk from my template, 
so that is where the same BTRFS UUID comes from. But this was not the 
real issue. I copied the data on EXT4 disk first and then to the new 
disk to avoid having same BTRFS UUIDs. I will try changing the UUIDs as 
suggested later.)

In summary, I think that BTRFS was not able to recover from the scenario 
explained above. VMs with EXT4 could boot normally.

Regards,
Jiri


On 28/12/2015 10:13 AM, Hugo Mills wrote:
> On Mon, Dec 28, 2015 at 12:01:39AM +0100, Christoph Anton Mitterer wrote:
>> On Mon, 2015-12-28 at 02:27 +1100, Jiri Kanicky wrote:
>>> Thanks for the reply. Looks like I will have o use some newer
>>> distro.
>> As it was already said... btrfs may even corrupt your filesystem if
>> colliding UUIDs are "seen".
>>
>> At least to me it's currently unclear what "seen" exactly means...
>> actually trying a mount, or already when just a device with colliding
>> IDs appear.
>     The damage happens on (or after) mount. Until that point there's no
> danger.
>
>     The OS (usually udev) will run btfs dev scan when a new block
> device is detected, and it tells the kernel that there's a btrfs
> filesystem with a particular UUID on a particular block device.
>
>     The kernel uses this information to decide which devices to include
> when it assembles a filesystem. If you have two devices where there
> should be only one (particularly if the data on the two was similar
> but has now diverged), then the kernel can end up writing to one or
> other device arbitrarily, possibly having read state from the other
> one, and things screw up rather fast.
>
>     Hugo.
>
>> So whenever you do your recovery works, make sure that there's never a
>> moment where more than one btrfs block device appears with the same
>> UUID.
>> Even when it's just for some seconds it may already cause corruption.
>>
>>
>> Cheers,
>> Chris.
>
>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How to change BTRFS filesystem UUID
  2015-12-28  2:13         ` Jiri Kanicky
@ 2015-12-28  4:35           ` Duncan
  0 siblings, 0 replies; 9+ messages in thread
From: Duncan @ 2015-12-28  4:35 UTC (permalink / raw)
  To: linux-btrfs

Jiri Kanicky posted on Mon, 28 Dec 2015 13:13:24 +1100 as excerpted:

> VM with BTRFS filesystem running on XenServer. The VM disk is a VHD
> stored on NFS storage. NFS storage ran out of space, and I found the
> BTRFS in RO mode. I could not remount it as RW after increasing the
> storage space. I rebooted the VM and the VM was not able to boot
> anymore. There were many lines during boot reporting "btrfs open_ctree
> failed" and the boot ended up in dracut mode.
> 
> I booted from CD and find out that I can mount the BTRFS filesystem and
> all data are there.

You did well. =:^)

Just in case you ever get into a situation where the btrfs will /not/ 
mount, however, there's an additional tool you can try to hopefully at 
least recover the data off of it, copying it to a new (possibly non-
btrfs) location from the unmounted filesystem.

btrfs restore

In addition to the btrfs-restore manpage, there's even a wiki page on it 
that has some "extraordinary measures" you can try if restore won't work 
by itself, using btrfs-find-root to hopefully find a usable previous root 
to feed to restore's -t option.  However, once you get to this level 
you're basically trying to reconstruct at least enough of a filesystem 
from historical bits and pieces as they may still be found on the device 
to be able to restore from, and it does get quite technical, so many 
people need help, and only some end up being able to restore most or all 
of their data, as often it's simply too damaged.

So the ideal is obviously to have backups if the data is important enough 
to you that you'd be jumping thru these hoops if you had to, and once you 
have backups, then restore becomes a tool to be used to possibly get a 
newer copy than your backup had, but no big deal if it fails as you /do/ 
have backups.  And at that point, you don't need to worry too much about 
the "extraordinary measures" stuff, because if it doesn't work with 
normal measures, then you just use the backup.

What's nice about btrfs-restore is that it works in read-only mode on the 
unmounted filesystem in question and thus won't cause any more damage.  
As a result, it's a good tool to use to try to get a current backup with 
if you don't have one, before trying seriously invasive procedures that 
if they don't fix the problem, could damage the filesystem further, 
rendering it impossible to get anything useful out of it.

Anyway, just pointing out the btrfs restore tool, as it's a very useful 
tool to have in your toolbox if a btrfs won't mount.  You will want to 
use a recent version of btrfs-progs, however, as btrfs restore has 
notably improved over time, with the last fix to it in 4.2.3, an off-by-
one fix to the symlink restoration code added in 4.0.1, and 4.0 added 
metadata (time/mode/uid/gid) restoration, where before that files were 
restored with the ownership (root) and umask of the btrfs restore process 
and had to be manually corrected.

-- 
Duncan - List replies preferred.   No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master."  Richard Stallman


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-12-28  4:35 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-27 14:31 How to change BTRFS filesystem UUID Jiri Kanicky
2015-12-27 14:45 ` Hugo Mills
2015-12-27 15:27   ` Jiri Kanicky
2015-12-27 23:01     ` Christoph Anton Mitterer
2015-12-27 23:13       ` Hugo Mills
2015-12-28  1:00         ` Duncan
2015-12-28  2:13         ` Jiri Kanicky
2015-12-28  4:35           ` Duncan
2015-12-27 14:48 ` Holger Hoffstätte

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).