Re: FS: hardlinks on directories

Olivier Galibert
2003-08-04T20:04:37Z

On Mon, Aug 04, 2003 at 04:50:02PM +0200, Stephan von Krawczynski wrote:
> On Mon, 4 Aug 2003 15:04:28 +0100 (BST)
> Anton Altaparmakov <aia21@cam.ac.uk> wrote:
> > You ask for examples of applications? There are millions! Anything that
> > walks the directory tree for a start, e.g. ls -R, find, locatedb, medusa,
> > du, any type of search and/or indexing engine, chown -R, cp -R, scp
> > -R, chmod -R, etc...
>
> There is a flaw in this argument. If I am told that mount --bind does just
> about what I want to have as a feature then these applictions must have the
> same problems already (if I mount braindead). So an implementation in fs cannot
> do any _additional_ damage to these applications, or not?

There is a subtle but fundamental difference between mount --bind and
hard links for directories[1]: mounts done under a bind point and
mounts done under the original tree are independant. An example on a
system (rh9) with the "standard" /dev/pts mounted and no devfs:

root@zalem:~ #1 >mkdir x
root@zalem:~ #2 >mount --bind /dev x
root@zalem:~ #3 >ls -l /dev |head -5
total 305
crw------- 1 root root 10, 10 Jan 30 2003 adbmouse
crw-r--r-- 1 root root 10, 175 Jan 30 2003 agpgart
crw------- 1 root root 10, 4 Jan 30 2003 amigamouse
crw------- 1 root root 10, 7 Jan 30 2003 amigamouse1
root@zalem:~ #4 >ls -l x | head -5
total 306
crw------- 1 root root 10, 10 Jan 30 2003 adbmouse
crw-r--r-- 1 root root 10, 175 Jan 30 2003 agpgart
crw------- 1 root root 10, 4 Jan 30 2003 amigamouse
crw------- 1 root root 10, 7 Jan 30 2003 amigamouse1
root@zalem:~ #5 >ls -l x/pts |head -5
total 0
root@zalem:~ #6 >ls -l /dev/pts | head -5
total 0
crw--w---- 1 galibert tty 136, 0 Aug 4 21:56 0
crw--w---- 1 galibert tty 136, 1 Aug 4 21:56 1
crw--w---- 1 galibert tty 136, 2 Aug 4 21:57 2
root@zalem:~ #7 >mount --bind /tmp x/input
root@zalem:~ #8 >ls -l x/input | head -5
total 25
-rw-r--r-- 1 galibert mame 0 Aug 1 23:24 Acrodqnzpn
drwx------ 2 galibert mame 48 Jul 31 22:52 galibert
drwx------ 2 galibert mame 72 Aug 1 22:17 gsrvdir500
srwxrwxrwx 1 wnn wnn 0 Aug 4 21:11 jd_sockV4
root@zalem:~ #9 >ls -l /dev/input | head -5
total 0
crw------- 1 root root 13, 64 Jan 30 2003 event0
crw------- 1 root root 13, 65 Jan 30 2003 event1
crw------- 1 root root 13, 74 Jan 30 2003 event10
crw------- 1 root root 13, 75 Jan 30 2003 event11

You can see that ~root/x and /dev are the same file tree but different
mount spaces. Because of that you can't have a loop, because a bind
mount can't point to a mount space that is a predecessor of itself.

OG.

[1] You can mount --bind files.