Re: Two identical copies of an image mounted result in changes to both images if only one is modified

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 20, 2013 at 10:22:07AM +0000, Gabriel de Perthuis wrote:
> On Thu, 20 Jun 2013 10:16:22 +0100, Hugo Mills wrote:
> > On Thu, Jun 20, 2013 at 10:47:53AM +0200, Clemens Eisserer wrote:
> >> Hi,
> >> 
> >> I've observed a rather strange behaviour while trying to mount two
> >> identical copies of the same image to different mount points.
> >> Each modification to one image is also performed in the second one.
> 
> >> touch m2/hello
> >> ls -la m1  //will now also include a file calles "hello"
> >> 
> >> Is this behaviour intentional and known or should I create a bug-report?
> > 
> >    It's known, and not desired behaviour. The problem is that you've
> > ended up with two filesystems with the same UUID, and the FS code gets
> > rather confused about that. The same problem exists with LVM snapshots
> > (or other block-device-layer copies).
> > 
> >    The solution is a combination of a tool to scan an image and change
> > the UUID (offline), and of some code in the kernel that detects when
> > it's being told about a duplicate image (rather than an additional
> > device in the same FS). Neither of these has been written yet, I'm
> > afraid.
> 
> To clarify, the loop devices are properly distinct, but the first
> device ends up mounted twice.
> 
> I've had a look at the vfs code, and it doesn't seem to be uuid-aware,
> which makes sense because the uuid is a property of the superblock and
> the fs structure doesn't expose it.  It's a Btrfs problem.

   Yes, it is. (I didn't intend, however obliquely, to imply that it
wasn't).

> Instead of redirecting to a different block device, Btrfs could and
> should refuse to mount an already-mounted superblock when the block
> device doesn't match, somewhere in or below btrfs_mount.  Registering
> extra, distinct superblocks for an already mounted raid is a different
> matter, but that isn't done through the mount syscall anyway.

   The problem here is that you could quite legitimately mount
/dev/sda (with UUID=AA1234) on, say, /mnt/fs-a, and /dev/sdb (with
UUID=AA1234) on /mnt/fs-b -- _provided_ that /dev/sda and /dev/sdb are
both part of the same filesystem. So you can't simply prevent mounting
based on the device that the mount's being done with.

   Hugo.

-- 
=== Hugo Mills: hugo@... carfax.org.uk | darksatanic.net | lug.org.uk ===
  PGP key: 65E74AC0 from wwwkeys.eu.pgp.net or http://www.carfax.org.uk
                   --- I know of three kinds: hot, ---                   
                cool,  and what-time-does-the-tune-start?                

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux