broken mount behaviour on jessie
    Peter Palfrader 
    weasel at debian.org
       
    Sun Jan 31 10:48:34 GMT 2016
    
    
  
Trying to figure out why my schroot builds keep failing after
upgrading to jessie, I finally narrowed it down to broken behaviour with
mount on jessie:
} root at valiant:/mnt# find
} .
} ./tmp1
} ./tmp1/dev
} ./tmp0
} ./tmp0/dev
Two trees, with a dev directory each.
Let's mount /dev and /dev/pts there:
} root at valiant:/mnt# /bin/mount -v -t none -o rw,bind /dev tmp0/dev
} mount: /dev bound on /mnt/tmp0/dev.
} root at valiant:/mnt# /bin/mount -v -t none -o rw,bind /dev/pts tmp0/dev/pts
} mount: /dev/pts bound on /mnt/tmp0/dev/pts.
} root at valiant:/mnt# grep /mnt /proc/mounts
} udev /mnt/tmp0/dev devtmpfs rw,relatime,size=10240k,nr_inodes=3087992,mode=755 0 0
} devpts /mnt/tmp0/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
Seems to have worked.  Yay.
Now the second tree:
} root at valiant:/mnt# /bin/mount -v -t none -o rw,bind /dev tmp1/dev
} mount: /dev bound on /mnt/tmp1/dev.
} root at valiant:/mnt# grep /mnt /proc/mounts
} udev /mnt/tmp0/dev devtmpfs rw,relatime,size=10240k,nr_inodes=3087992,mode=755 0 0
} devpts /mnt/tmp0/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
} udev /mnt/tmp1/dev devtmpfs rw,relatime,size=10240k,nr_inodes=3087992,mode=755 0 0
So far, so good.  Now for /dev/pts:
} root at valiant:/mnt# /bin/mount -v -t none -o rw,bind /dev/pts tmp1/dev/pts
} mount: /dev/pts bound on /mnt/tmp1/dev/pts.
} root at valiant:/mnt# grep /mnt /proc/mounts
} udev /mnt/tmp0/dev devtmpfs rw,relatime,size=10240k,nr_inodes=3087992,mode=755 0 0
} devpts /mnt/tmp0/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
} udev /mnt/tmp1/dev devtmpfs rw,relatime,size=10240k,nr_inodes=3087992,mode=755 0 0
} devpts /mnt/tmp1/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
} devpts /mnt/tmp0/dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
Something's fishy here.  Note how there is now a second mount on
tmp0/dev/pts.
This is a real problem as exhibited in these two use-cases:
o) you cannot unmount the tmp0 tree while the tmp1 tree is busy:
} root at valiant:/mnt# (cd tmp1/dev/pts ; sleep 10 &)
} root at valiant:/mnt# umount /mnt/tmp0/dev/pts
} umount: /mnt/tmp0/dev/pts: target is busy
}         (In some cases useful info about processes that
}          use the device is found by lsof(8) or fuser(1).)
o) if it's not busy, and you try to umount the tmp0 tree, you mess with
   the tmp1 tree instead:
} root at valiant:/mnt# ls /mnt/tmp0/dev/pts
} 0  1  10  11  13  14  15  16  17  18  19  2  20  21  22  23  24  25  26  3  4  5  6  7  8  ptmx
} root at valiant:/mnt# ls /mnt/tmp1/dev/pts
} 0  1  10  11  13  14  15  16  17  18  19  2  20  21  22  23  24  25  26  3  4  5  6  7  8  ptmx
} root at valiant:/mnt# umount /mnt/tmp0/dev/pts
} root at valiant:/mnt# ls /mnt/tmp0/dev/pts
} 0  1  10  11  13  14  15  16  17  18  19  2  20  21  22  23  24  25  26  3  4  5  6  7  8  ptmx
} root at valiant:/mnt# ls /mnt/tmp1/dev/pts
} root at valiant:/mnt#
It has been suggested on IRC that this is due to systemd mounting
filesystems with O_SHARE.  Regardless of why, these two things at the
bottom are horribly broken.  We need to fix this somehow.
Cheers,
-- 
                            |  .''`.       ** Debian **
      Peter Palfrader       | : :' :      The  universal
 https://www.palfrader.org/ | `. `'      Operating System
                            |   `-    https://www.debian.org/
    
    
More information about the Pkg-systemd-maintainers
mailing list