[comp.sys.sun] Need to find name of server which owns a file

zmls04@uunet.uu.net (Martin L. Smith) (06/23/89)

We are building some network program-maintenance tools.  We need a way to
associate a unique label with each file in the network (preferably, with
every file in the universe).  From our (fairly ignorant) point of view, we
think we would have what we want if we knew how to generate, given a
pathname on some node, a string of the form

	(server-node-id):(true-pathname-on-server).

This is based on our understanding that every node in the galaxy has a
unique id (associated with its network address) and that every file in the
galaxy has a server on which it resides and a `true' physical path on some
device owned by the server.  Our problems are:

	(1) we aren't 100% sure this is correct.  can anyone tell us?
	(2) even if it's correct, we don't know how to find the desired
	string in a reasonable way.  We haven't been able to find out
	enough about our OS (Sun 4.0) to know what to do.  In particular,
	statfs(2) doesn't seem to tell us what we want.  Does anyone know
	how to generate such a string?  It <<must>> be possible;
	presumably the OS does it all the time.

Festering in ignorance, we remain
	Yrs. Sincerely,
		etc,etc.

brent@uunet.uu.net (Brent Chapman) (06/28/89)

# We are building some network program-maintenance tools.  We need a way to
# associate a unique label with each file in the network (preferably, with
# every file in the universe).  From our (fairly ignorant) point of view, we
# think we would have what we want if we knew how to generate, given a
# pathname on some node, a string of the form
# 
#         (server-node-id):(true-pathname-on-server).
# 
# This is based on our understanding that every node in the galaxy has a
# unique id (associated with its network address) and that every file in the
# galaxy has a server on which it resides and a `true' physical path on some
# device owned by the server.  Our problems are:
# 
#         (1) we aren't 100% sure this is correct.  can anyone tell us?

It's not.  Links to a file (so-called "hard" links, as opposed to the more
common (these days, anyway) "symbolic" links) are indistinguishable from
the "original" name of a file, thus making it impossible to determine the
"one true name" of the file (there isn't one).

Creating a named file involves two steps: creating the file itself, and
creating a link with the file's name from the file's parent directory to
the file.  There's nothing special about the first, second, n-th link to a
file, and no way to determine that a given link _is_ the first, second, or
n-th.  The only thing the filesystem keeps track of is how many links
still point to the actual data; when the number of links drops to 0, the
last link to the data has been removed, and the data is deleted.

Let's say I have a directory called "d" containing a file called "a".  If
I do "cd d ; ln a b", I have just created a new link to the same file; the
new link is called "b".  "a" and "b" are now totally indistinguishable as
links to the file; I can reference the file by either (or both), and I can
delete either and still reference the file by the other.

If all I have is the raw data of a file, and no idea what the file is
called, then I have what's called an "i-node number".  To find a name for
the file (or all the names for a file), I have to search all the
directories for the filesystem the file is in, looking for this i-node
number name in each directory (a directory is basicly just a map between
link names and inode numbers).  Like I said, there is no way of knowing
which of the possibly many different names that map to a given i-node
number is the "real" name of the file; there is no way to tell which was
"first" or "last", and they are all equally "real".


-Brent
--
Brent Chapman					Capital Market Technology, Inc.
Computer Operations Manager			1995 University Ave., Suite 390
brent@capmkt.com				Berkeley, CA  94704
{apple,lll-tis,uunet}!capmkt!brent		Phone:  415/540-6400