home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume21 / amd / part13 (.txt) < prev    next >
LaTeX Document  |  1990-04-10  |  53KB  |  1,054 lines

  1. Subject:  v21i101:  An Automounter for NFS systems, Part13/13
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: 61f3d124 582498ed 5ead014e 5c88b119
  5. Submitted-by: Jan-Simon Pendry <jsp@doc.ic.ac.uk>
  6. Posting-number: Volume 21, Issue 101
  7. Archive-name: amd/part13
  8. #! /bin/sh
  9. # This is a shell archive.  Remove anything before this line, then unpack
  10. # it by saving it into a file and typing "sh file".  To overwrite existing
  11. # files, type "sh file -c".  You can also feed this as standard input via
  12. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  13. # will see the following message at the end:
  14. #        "End of archive 13 (of 13)."
  15. # Contents:  doc/amd.tex.1
  16. # Wrapped by rsalz@papaya.bbn.com on Tue Apr 10 15:12:17 1990
  17. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  18. if test -f 'doc/amd.tex.1' -a "${1}" != "-c" ; then 
  19.   echo shar: Will not clobber existing file \"'doc/amd.tex.1'\"
  20. echo shar: Extracting \"'doc/amd.tex.1'\" \(49780 characters\)
  21. sed "s/^X//" >'doc/amd.tex.1' <<'END_OF_FILE'
  22. X% Run this through \LaTeX...
  23. X% $Id: amd.tex,v 5.1.1.3 90/01/11 17:05:26 jsp Exp Locker: jsp $
  24. X% Copyright (c) 1989 Jan-Simon Pendry
  25. X% Copyright (c) 1989 Imperial College of Science, Technology & Medicine
  26. X% Copyright (c) 1989 The Regents of the University of California.
  27. X% All rights reserved.
  28. X% This code is derived from software contributed to Berkeley by
  29. X% Jan-Simon Pendry at Imperial College, London.
  30. X% Redistribution and use in source and binary forms are permitted
  31. X% provided that the above copyright notice and this paragraph are
  32. X% duplicated in all such forms and that any documentation,
  33. X% advertising materials, and other materials related to such
  34. X% distribution and use acknowledge that the software was developed
  35. X% by Imperial College of Science, Technology and Medicine, London, UK.
  36. X% The names of the College and University may not be used to endorse
  37. X% or promote products derived from this software without specific
  38. X% prior written permission.
  39. X% THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  40. X% IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  41. X% WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  42. X%    %W% (Berkeley) %G%
  43. X% Set this to Report for a report
  44. X% or Article for an article
  45. X\def\ArticleReport{Article}
  46. X\def\Article{Article}
  47. X\def\ifarticle{\ifx\ArticleReport\Article}
  48. X%\documentstyle[a4,nh,11pt,twoside,openbib,draft]{report}
  49. X%\documentstyle[a4,nh,11pt,openbib,draft]{report}
  50. X\ifarticle
  51. X\documentstyle[a4,nh]{article}
  52. X\else
  53. X\documentstyle[a4,nh,11pt,openbib]{report}
  54. X\newcommand{\DRAFT}{}%{DRAFT}
  55. X\newcommand{\VERSION}{5.1c}
  56. X% The next block of commands are only used in report mode
  57. X\ifarticle
  58. X\newcommand{\Chapter}{\section}\renewcommand{\chapter}{\section}
  59. X\newcommand{\Section}{\subsection}
  60. X\newcommand{\Subsection}{\subsubsection}
  61. X\else
  62. X\newcommand{\Chapter}{\chapter}
  63. X\newcommand{\Section}{\section}
  64. X\newcommand{\Subsection}{\subsection}
  65. X\pagestyle{footers}
  66. X\pagenumbering{roman}
  67. X\newcommand{\Edition}{Second}
  68. X\newcommand{\see}{}
  69. X\setheader{}
  70. X\setfooter{}
  71. X\setchapterfoot{}
  72. X\ifarticle\else
  73. X\setcounter{tocdepth}{2}
  74. X\setcounter{secnumdepth}{2}
  75. X\newcommand{\C}{{\sf C}}
  76. X\newcommand{\Unix}{{\sc Unix}}
  77. X\newcommand{\NFS}{{\sf NFS}}
  78. X\newcommand{\UFS}{{\sf UFS}}
  79. X\newcommand{\Amd}{{\sf Amd}}
  80. X\newcommand{\Amq}{{\sf Amq}}
  81. X\newcommand{\amd}{{\sf amd}}
  82. X\newcommand{\amq}{{\sf amq}}
  83. X\newcommand{\opt}[1]{{\tt #1}}
  84. X\newcommand{\Ref}[1]{{\S\ref{#1},~p\pageref{#1}}}
  85. X\newcommand{\Var}[1]{{\tt \$\{{#1}\}}}
  86. X\newcommand{\etc}{{\em etc\/}}
  87. X\newcommand{\ie}{{\em\/ie\/}}
  88. X\newcommand{\eg}{{\em\/eg\/}}
  89. X\begin{document}
  90. X\begin{titlepage}
  91. X\vskip 6.6em
  92. X\begin{center}
  93. X{\LARGE\Amd\ -- An Automounter}\\[.2cm]
  94. X%\Large \Edition\ Edition \\[.1cm]
  95. X{\DRAFT}
  96. X\par
  97. X\vskip 2.2em
  98. X{\large \lineskip .75em
  99. X\begin{tabular}[t]{c}
  100. X{\Large\em Jan-Simon Pendry} \\
  101. X{\tt <jsp@doc.ic.ac.uk>}\\
  102. XDepartment of Computing,\\
  103. XImperial College,\\
  104. XLondon SW7 2BZ
  105. X\end{tabular}\par}
  106. X\vskip 1.3em
  107. X{\small December 1989\par}
  108. X{\small Printed \today}
  109. X\end{center}\par
  110. X\vskip 6em
  111. X\begin{center}
  112. X{\Large\bf Abstract}
  113. X\end{center}
  114. X{\parindent 0pt
  115. X{\bf amd}, {\em $\acute{e}$i$\acute{e}$md$\acute{\imath}$:},
  116. Xa program providing an automounting service
  117. X[fr. {\em A}uto{\em M}ount {\em D}aemon]\par
  118. X{\bf automount}, {\em \"{o}'t\={o}-mownt, v.i.}
  119. Xto mount a filesystem automatically
  120. X[Gr.\ {\em automatos}, self-moving $+$ \Unix\ {\bf mount}(2)]%---L.
  121. X%{\em m\={o}ns, montis}, mountain]
  122. X\par\mbox{}\par
  123. XAn {\em automounter} maintains a cache of mounted filesystems.
  124. XFilesystems are mounted on demand when they are first referenced
  125. Xand unmounted after a period of inactivity.
  126. X\par\mbox{}\par
  127. X\Amd\ may be used as a replacement for Sun's automounter \cite{usenix:automounter}.
  128. XThe choice of which filesystem to mount can be controlled dynamically
  129. Xwith {\em selectors}.
  130. XSelectors allow decisions of the form
  131. X``hostname is {\em this}\,'' or ``architecture is not {\em that}.''
  132. XSelectors may be combined arbitrarily.
  133. X\Amd\ also supports a variety of filesystem types,
  134. Xincluding \NFS, \UFS\ and the novel {\em program}
  135. Xfilesystem.
  136. XThe combination of selectors and multiple filesystem types allows
  137. Xidentical configuration files to be used on each machine so
  138. Xreducing the administrative overhead.
  139. X\Amd\ ensures that it will not hang if a remote server
  140. Xgoes down.  Moreover, \amd\ can determine when a remote
  141. Xserver has become inaccessible and then mount replacement
  142. Xfilesystems as and when they become available.
  143. X\par\mbox{}\par
  144. X\Amd\ contains no proprietary source code and
  145. Xhas been ported to numerous flavours of \Unix.
  146. X%\ifarticle\else
  147. X\newpage
  148. X\vspace*{30pt}
  149. X%{\large
  150. X%\parindent 0pt
  151. X%WARNING:
  152. X%%warnings go here
  153. X%}\par
  154. X\vspace{4in}
  155. X{\parindent 0pt
  156. XThis document describes release ``\VERSION'' of \amd.\par
  157. X\vskip 1ex
  158. XCopyright \copyright\ 1989 Jan-Simon Pendry\\
  159. XCopyright \copyright\ 1989 Imperial College of Science, Technology \& Medicine\\
  160. XCopyright \copyright\ 1989 The Regents of the University of California.
  161. X\vskip 1ex
  162. XAll Rights Reserved.
  163. X\vskip 1ex
  164. X\begin{flushleft}
  165. XPermission to copy this document, or any portion of it, as\\
  166. Xnecessary for use of this software is granted provided this\\
  167. Xcopyright notice and statement of permission are included.
  168. X\end{flushleft}
  169. X%\fi %!article
  170. X\end{titlepage}
  171. X\setheader{\vbox{\hbox to\hsize{\rightmark\hfill\thepage}\vskip 2pt\hrule}}
  172. X%\setbothheaders
  173. X%{\vbox{\hbox to\hsize{\thepage\hfill\leftmark}\vskip 2pt\hrule}}%
  174. X%{\vbox{\hbox to\hsize{\rightmark\hfill\thepage}\vskip 2pt\hrule}}
  175. X%\setfooter{\hfil\Edition\ Edition {\DRAFT}\hfil}
  176. X\setfooter{\hfil{\DRAFT}\hfil}
  177. X%\setbothfooters
  178. X%{\thepage\hfil\Edition\ Edition {\DRAFT}}%
  179. X%{\Edition\ Edition {\DRAFT}\hfil\thepage}
  180. X%\setchapterfoot{\thepage\hfil\Edition\ Edition {\DRAFT}\hfil\thepage}
  181. X%\setchapterfoot{\Edition\ Edition {\DRAFT}\hfil\thepage}
  182. X\setchapterfoot{{\DRAFT}\hfil\thepage\hfil}
  183. X\ifarticle\else
  184. X\tableofcontents
  185. X\Chapter{Overview}
  186. X\pagenumbering{arabic}
  187. X\Amd\ maintains a cache of mounted filesystems.  Filesystems are {\em demand-mounted}
  188. Xwhen they are first referenced and unmounted after a period of inactivity.
  189. X\Amd\ may be used as a replacement for Sun's {\bf automount}(8) \cite{sun:automount} program.
  190. XIt contains no proprietary source code and has been ported
  191. Xto numerous flavours of \Unix.
  192. X\Amd\ was designed as the basis for experimenting with filesystem
  193. Xlayout and management.  Although \amd\ has many direct applications it
  194. Xis loaded with additional features which have little use.
  195. XAt some point the infrequently used components may be removed to
  196. Xstreamline the production system.
  197. X\Amd\ supports the notion of {\em replicated} filesystems by evaluating
  198. Xeach member of a list of possible filesystem locations in parallel.
  199. X\Amd\ checks that each cached mapping remains valid.  Should a mapping be
  200. Xlost -- such as happens when a fileserver goes down -- \amd\ automatically
  201. Xselects a replacement should one be available.
  202. XThe fundamental concept is to separate the name used to refer to
  203. Xa file from the name used to refer to its physical storage location.
  204. XThis allows the same files to be accessed with the same name regardless of where
  205. Xin the network the name is used.  This is very different from placing
  206. X{\tt /n/hostname} in front of the pathname since that includes location
  207. Xdependent information which may change if files are moved to another
  208. Xmachine.
  209. XBy placing the required mappings in a centrally administered database,
  210. Xfilesystems can be re-organised without requiring changes to password
  211. Xfiles, shell scripts and so on.
  212. X\Section{Filesystem Namespace}
  213. X\Unix\ provides two forms of binding between names and files.
  214. XA {\em hard link} completes the binding when the name is added to the filesystem.
  215. XA {\em soft link} delays the binding until the name is accessed.
  216. XAn {\em automounter} adds a further form in which the binding of name to
  217. Xfilesystem is delayed until the name is accessed.
  218. X\Amd\ operates by introducing new mount points into the filesystem.
  219. XThe kernel sees these mount points as \NFS\ \cite{sun:nfs} filesystems being served by \amd.
  220. XHaving attached itself to the filesystem, \amd\ is now able to control
  221. Xthe view the rest of the system has of those mount points.
  222. X\Section{Operational Principles}
  223. X\Amd\ receives requests from the kernel one at a time.
  224. XThe requests are RPC \cite{sun:rpc} calls using the \NFS\ protocol.
  225. XWhen a {\em lookup} call is received \amd\ mounts the required
  226. Xfilesystem if it is not already mounted and then returns a symbolic link
  227. Xpointing to the real mount point.
  228. XOnce the symbolic link is returned, the kernel will send all
  229. Xother requests direct to the mounted filesystem.
  230. XIf a filesystem is not yet mounted, \amd\ consults a configuration
  231. X{\em mount-map} corresponding to the automount point.
  232. X\Amd\ then makes a runtime decision on what and where to mount
  233. Xa filesystem based on the information obtained from the map.
  234. X\Amd\ does not implement all the \NFS\ requests; only those
  235. Xrelevant to name binding such as {\em lookup}, {\em readlink}
  236. Xand {\em readdir}.  Some other calls are also implemented
  237. Xbut most simply return an error code; for example {\em mkdir}
  238. Xalways returns ``Read-only filesystem''.
  239. X\Section{Mounting a Filesystem}
  240. XEach automount point has a mount map.  The mount map contains
  241. Xa list of key--value pairs.  The key is the name of the filesystem to
  242. Xbe mounted.  The value is a list of locations describing where the
  243. Xfilesystem is stored.
  244. XIn the source for the map the value would look like
  245. X\begin{quote}
  246. X${\em location}_1\ \ {\em location}_2\ \ \ldots\ \ {\em location}_n$
  247. X\end{quote}
  248. X\Amd\ examines each location in turn.  Each location may contain {\em selectors}
  249. Xwhich control whether \amd\ can use that location.  For example, the location
  250. Xmay be restricted to use by certain hosts.  Those locations which cannot be used
  251. Xare ignored.
  252. X\Amd\ attempts to mount the filesystem described by each remaining location
  253. Xuntil a mount succeeds or \amd\ can no longer proceed.
  254. XThe latter can occur in three ways:
  255. X\begin{itemize}
  256. X\item
  257. XIf none of
  258. Xthe locations could be used, or if all of the locations caused an error,
  259. Xthen the last error is returned.
  260. X\item
  261. XIf a location could be used but was mounted in the background then \amd\ marks
  262. Xthat mount as being in progress and continues with the next request; no reply
  263. Xis sent to the kernel.
  264. X\item
  265. XLastly, one or more of the mounts may have been {\em deferred}.
  266. XA mount is deferred if extra information is required before the mount
  267. Xcan proceed.  When the information becomes available the mount will
  268. Xtake place, but in the mean time no reply is sent to the kernel.
  269. XIf the mount is deferred, \amd\ continues to try any remaining locations.
  270. X\end{itemize}
  271. X\Section{Non-blocking Operation}
  272. XSince there is only one instance of \amd\ for each automount point,
  273. Xand usually only one instance on each machine, it is important
  274. Xthat it is always available to service kernel calls.
  275. X\Amd\ goes to great lengths to ensure that it does not block in a system call.
  276. XAs a last resort \amd\ will fork before it attempts a system call that may block
  277. Xindefinitely, such as mounting an \NFS\ filesystem.
  278. XOther tasks such as obtaining filehandle information for an \NFS\ filesystem,
  279. Xare done using a purpose built non-blocking RPC library which is integrated
  280. Xwith \amd's task scheduler (\see \Ref{task scheduler}).
  281. XThis library is also used to implement \NFS\ keep-alives (\see \Ref{keepalives}).
  282. XWhenever a mount is deferred or backgrounded, \amd\ must wait for it to complete
  283. Xbefore replying to the kernel.  However, this would cause \amd\ to block waiting
  284. Xfor a reply to be constructed.  Rather than do this, \amd\ simply {\em drops}
  285. Xthe call under the assumption that the kernel RPC mechanism will automatically
  286. Xretry the request.
  287. X\Section{Task Scheduling}\label{task scheduler}
  288. X\Amd\ provides a task scheduler to support its non-blocking semantics.
  289. XThe basic operation of the scheduler is to call a procedure when
  290. Xa particular event occurs.  A general sleep/wakeup mechanism is used
  291. Xand sub-process support is built on that.  The scheduler maintains
  292. Xtwo queues: one of blocked calls and one of callbacks waiting to
  293. Xbe made.
  294. XWhen a child process exits, its exit status is picked up by a signal
  295. Xhandler and a wakeup is issued on the internal job descriptor for that sub-process.
  296. XA timeout/untimeout mechanism provides for time dependent processing.
  297. X\Section{Automatic Unmounting}
  298. XTo avoid an ever increasing number of filesystem mounts, \amd\ unmounts
  299. Xa filesystem that appears not to have been used recently.  A time-to-live
  300. Xinterval is associated with each mounted filesystem and when that interval
  301. Xexpires, \amd\ unmounts the filesystem.
  302. XIf the unmount fails, for example the filesystem is still active,
  303. Xthe time-to-live interval is extended.
  304. XThe global default for this grace period is controlled by the ``-w'' command-line
  305. Xoption (\see \Ref{opt:wait}).  It is also possible to set this value on a per-mount basis
  306. X(\see \Ref{opt:utimeout}).
  307. X\Section{Keep-alives}\label{keepalives}
  308. XUse of some filesystem types requires the presence of a server on another machine.
  309. XIf a machine crashes then it is of no concern to processes on that machine
  310. Xthat the filesystem is unavailable.  However, to processes on a remote host using
  311. Xthat machine as a fileserver this event is important.  This situation is
  312. Xmost widely recognised when an \NFS\ server crashes and the behaviour observed
  313. Xon client machines is that more and more processes hang.
  314. XIn order to provide the possibility of recovery, \amd\ implements a {\em keep-alive}
  315. Xinterval timer for some filesystem types.
  316. XCurrently only \NFS\ makes use of this service.
  317. XThe basis of the \NFS\ keep-alive implementation is the observation that
  318. Xmost sites maintain replicated copies of common system data such as manual
  319. Xpages, most or all programs, system source code and so on.
  320. XIf one of those servers goes down it would be reasonable to mount one of
  321. Xthe others as a replacement.
  322. X\Amd\ keeps track of which servers are up and which are down.
  323. XIt does this by sending RPC requests to the servers' \NFS\ {\sc NullProc} and
  324. Xchecking whether a reply is returned.  If no replies are received after a
  325. Xshort period, \amd\ marks the fileserver {\em down}.
  326. XRPC requests continue to be sent so that it will notice when a fileserver
  327. Xcomes back up.
  328. XICMP echo packets \cite{rfc:icmp} are not used because it is the availability
  329. Xof the \NFS\ service that is important, not the existence of a base kernel.
  330. XWhenever a reference to a fileserver which is down is made via \amd\, an alternate
  331. Xfilesystem is mounted if one is available.  Although this action does not protect
  332. Xuser files, which are unique on the network, or processes which do not access files
  333. Xvia \amd\ or already have open files on the hung filesystem, it can prevent most new
  334. Xprocesses from hanging.
  335. XWith a suitable combination of filesystem management and mount-maps,
  336. Xmachines can be protected against most server downtime.  This can be
  337. Xenhanced by allocating boot-servers dynamically which allows a diskless
  338. Xworkstation to be quickly restarted if necessary.  Once the root filesystem
  339. Xis mounted, \amd\ can be started and allowed to mount the remainder of
  340. Xthe filesystem from whichever fileservers are available.
  341. X\Chapter{Mount-maps}
  342. X\Amd\ has no built-in knowledge of machines or filesystems.
  343. XExternal {\em mount-maps} are used to provide the required information.
  344. XSpecifically, \amd\ needs to know when and under what conditions it should
  345. Xmount filesystems.
  346. XThe map entry corresponding to the requested name contains
  347. Xa list of possible locations from which to resolve the request.
  348. XEach location specifies  filesystem type, information required by that
  349. Xfilesystem (for example the block special device in the case of \UFS), and
  350. Xsome information describing where to mount the filesystem (\see \Ref{mount location}).
  351. XA location may also contain {\em selectors} (\see \Ref{selectors}).
  352. X\Section{Map Types}
  353. XA mount-map can be implemented as a regular file, an ndbm database
  354. Xa YP map \cite{sun:yp} or via
  355. Xthe {\em Hesiod} \cite{mit:hesiod} name server.\footnote{
  356. XIn future, gdbm databases will also be supported.}
  357. XA mount-map name is a sequence of characters.
  358. XWhen an automount point is created a handle on the mount-map
  359. Xis obtained.  If the the map name begins with the sequence
  360. X``{\tt hesiod.}''\ then the {\em Hesiod} name server will be used.
  361. XOtherwise the map name is referenced as a file,
  362. Xthen as an ndbm database by that name and then as a YP map.
  363. XAs soon as a valid reference is found the map type is noted
  364. Xfor future use but any resources held are released, for example
  365. Xany open file descriptors are closed.
  366. XThe available map types are a configurable component of \amd\ and
  367. Xcan be displayed by running the command {\tt amd~-v}.
  368. XBy default, \amd\ does not cache any data retrieved from a mount map.
  369. XThis is a policy decision based on the observation that most workstations
  370. Xhave more available CPU time than spare memory.
  371. XHowever, on a multi-user service or larger workstation the faster
  372. Xresponse provided by a cache can be preferable.  The \opt{cache}
  373. Xoption can be specified on automount points to alter the
  374. Xcaching behaviour (\see \Ref{auto-fs}).
  375. X\Subsection{File maps}
  376. XWhen \amd\ searches a file for a map entry it does some simple parsing of the file
  377. Xand supports both comments and continuation lines.
  378. XContinuation lines are indicated by a backslash character (``{\verb+\+}'') as
  379. Xthe last character of a line in the file.  The backslash, newline character
  380. X{\em and any leading white space on the following line} are discarded.  A maximum
  381. Xline length of 2047 characters is enforced.  Each line must be terminated by
  382. Xa newline character; that is newlines are terminators, not separators.
  383. XAfter a complete line has been read from the file, including continuations,
  384. X\amd\ determines whether there is a comment on the line.
  385. XA comment begins with a hash (``{\tt \#}'') character and continues to the
  386. Xend of the line.
  387. XThere is no way to escape or change the comment lead-in hash character.
  388. XFile maps have a default cache mode of {\tt all} (\see \Ref{afs:cache}).
  389. X\Subsection{ndbm maps}\label{ndbm-maps}
  390. XAn ndbm map may be used as a fast access form of a file map.
  391. XA program, {\tt mk-amd-map}, converts a normal map file into
  392. Xan ndbm database.  Note that ndbm format files {\em may not} be
  393. Xsharable across machine architectures.
  394. XThe notion of speed generally only applies to large maps;
  395. Xa small map, less than a single disk block, is almost certainly
  396. Xbetter implemented as a file map.
  397. Xndbm maps do not support cache mode {\tt all} and
  398. Xhave a default cache mode of {\tt inc} (\see \Ref{afs:cache}).
  399. X\Subsection{YP maps}
  400. XWhen using YP, an \amd\ map is implemented directly by the
  401. Xunderlying YP map.
  402. XComments are {\em not} supported
  403. Xin the automounter and must be stripped when constructing the YP server's database.
  404. XYP maps do not support cache mode {\tt all} and
  405. Xhave a default cache mode of {\tt inc} (\see \Ref{afs:cache}).
  406. X\Subsection{Hesiod}
  407. XWhen the map name begins with the string {\tt hesiod.}\ lookups
  408. Xare made using the {\em Hesiod} name server.  The string following
  409. Xthe dot is used as a name qualifier and is prepended with
  410. Xthe key being resolved.  For example, if the map name is {\tt hesiod.homes}
  411. Xand the key is {\tt jsp} then {\em Hesiod} is asked to resolve
  412. X{\tt jsp.homes.automount}.
  413. X%\Subsection{Gdbm}
  414. X\Section{Map Lookup}
  415. XThe key is located in the map whose type was determined when the
  416. Xautomount point was first created.
  417. XIn general the key is a pathname component.
  418. XIn some circumstances this may be modified by variable expansion
  419. X(\see \Ref{var-expansion})
  420. Xand prefixing.
  421. XIf the automount point has a prefix, specified by the \opt{pref} option, then
  422. Xthat is prepended to the search key before the map is searched.
  423. XIf the key cannot be found then a {\em wildcard} match is attempted.
  424. XCurrently this simply attempts to locate a special key ``{\tt *}''.
  425. XIf the wildcard is not found then an error code is propagated back to the
  426. Xkernel, otherwise \amd\ proceeds as if an exact match had been found.
  427. XThe value field is then used to resolve the mount request (\see \Ref{filesystems}).
  428. X\Section{Location Format}\label{opts:values}
  429. XThe value field from the lookup provides the information required to mount a filesystem.
  430. XThe information is parsed according to the syntax shown in figure \ref{figure:so-grammar}.
  431. X\begin{figure}[htb]
  432. X\begin{tabbing}
  433. XIndent \= Long Gram Rule \= \kill
  434. X       \> {\em location-list}:\\
  435. X       \>              \> {\em location}\\
  436. X       \>              \> {\em location-selection}\ {\tt ||}\ {\em location}\\
  437. X       \> {\em location-selection}:\\
  438. X       \>              \> {\em location}\\
  439. X       \>              \> {\em location-selection}\ \ {\em location}\\
  440. X       \> {\em location}:\\
  441. X       \>              \> {\em location-info}\\
  442. X       \>              \> {\tt -}{\em location-info}\\
  443. X       \> {\em location-info}:\\
  444. X       \>              \> {\em sel-or-opt}\\
  445. X       \>              \> {\em location-info}{\tt ;}{\em sel-or-opt}\\
  446. X       \> {\em sel-or-opt}:\\
  447. X       \>              \> {\em selection}\\
  448. X       \>              \> {\em opt-ass}\\
  449. X       \> {\em selection}:\\
  450. X       \>              \> {\rm selector}{\tt ==}{\em value}\\
  451. X       \>              \> {\rm selector}{\tt !=}{\em value}\\
  452. X       \> {\em opt-ass}:\\
  453. X       \>              \> {\rm option}{\tt :=}{\em value}\\
  454. X\end{tabbing}
  455. X\caption{\label{figure:so-grammar}Location syntax}
  456. X\end{figure}
  457. XNote that unquoted whitespace is not allowed in a location description.
  458. XA {\em location-selection} is a list of possible filesystems with which to
  459. Xsatisfy the request.  location-selections are separated by the {\tt ||}
  460. Xoperator.  The effect of this operator is to prevent use of location-selections
  461. Xon its right if any of the location-selections on its left were selected
  462. X(see \Ref{selectors}).
  463. XThe location-selection, and singleton{\em  location-list},
  464. X{\tt type:=ufs;dev:=/dev/xd1g} would inform \amd\ to mount a
  465. X\UFS\ filesystem from the block special device {\tt /dev/xd1g}.
  466. XThe {\em sel-or-opt} component is either the name of an option required by a
  467. Xspecific filesystem, or it is the name of a built-in, predefined selector such
  468. Xas the architecture type.
  469. XThe value may be quoted with double quotes ``{\tt "}'',
  470. Xfor example {\tt type:="ufs";dev:="/dev/xd1g"}.  These quotes are
  471. Xstripped when the value is parsed and there is no way to get a double quote
  472. Xinto a value field.  Double quotes are used to get white space into a value field
  473. Xwhich is needed for the program filesystem (\see \Ref{pfs}).
  474. X\label{defaults}A location beginning with a dash ``{\tt -}'' is used
  475. Xto specify default values for subsequent locations.
  476. XAny previously specified defaults are discarded.  The
  477. Xdefault string can be empty in which case no defaults apply.
  478. XThe location {\tt -fs:=/mnt;opts:=ro} would set the local mount point
  479. Xto {\tt /mnt} and cause mounts to be read-only by default.
  480. XDefaults specified this way are appended to, and
  481. Xoverride, any global map defaults given
  482. Xwith {\tt /defaults}\label{/defaults}).
  483. XA {\tt /defaults} value {\em gdef} and a location list
  484. X\begin{quote}
  485. X${\tt -}{\em def}_a\ {\em loc}_{a_1}\ {\em loc}_{a_2}\ \ {\tt -}{\em def}_b\ {\em loc}_{b_1}\ \ldots$
  486. X\end{quote}
  487. Xis equivalent to
  488. X\begin{quote}
  489. X${\tt -}{\em gdef}{\tt ;}{\em def}_a\ {\em loc}_{a_1}\ {\em loc}_{a_2}\ \ {\tt -}{\em gdef}{\tt ;}{\em def}_b\ {\em loc}_{b_1}\ \ldots$
  490. X\end{quote}
  491. X\Subsection{Variable expansion}\label{var-expansion}
  492. XTo allow generic location specifications \amd\ does variable expansion
  493. Xon each location and also on some of the option strings.
  494. XAny option or selector appearing in the form \Var{{\em var}}
  495. Xis replaced by the current value of that option or selector.
  496. XFor example, if the value of \Var{key} was {\tt bin}, \Var{autodir} was {\tt /a}
  497. Xand \Var{fs} was \Var{autodir}{\tt /local/}\Var{key} then after
  498. Xexpansion \Var{fs} would have the value {\tt /a/local/bin}.
  499. XAny environment variable can be accessed in a similar way.
  500. XTwo pathname operators are available when expanding a variable.
  501. XIf the variable name begins with ``{\tt /}'' then only the
  502. Xlast component of then pathname is substituted.  For example,
  503. Xif \Var{path} was {\tt /foo/bar} then \Var{/path} would be
  504. Xexpanded to {\tt bar}.
  505. XSimilarly, if the variable name ends with ``{\tt /}'' then all but
  506. Xthe last component of the pathname is substituted.
  507. XIn the previous example, \Var{path/} would be expanded to {\tt /foo}.
  508. XTwo types of expansion are used: the options are expanded and
  509. Xthe selectors are left unexpanded, or {\em vice versa}.
  510. XBefore a map is consulted, any selectors in the name received from the kernel are expanded.
  511. XFor example, if the name is \Var{arch}{\tt .bin} and the
  512. Xmachine architecture is {\tt vax}, the value given to \Var{key}
  513. Xwill be {\tt vax.bin}.
  514. XNext, each location has any selectors expanded.
  515. XFinally, before they are used, the following options have any options expanded:
  516. X\opt{rhost}, \opt{mount}, \opt{unmount}, \opt{sublink}, \opt{rfs} and \opt{fs}.
  517. XIn general this sequence does ``the right thing'' except when one of
  518. Xthe options references one of the other options in which case the
  519. Xordering of expansions becomes significant.
  520. X\Subsection{Selectors}\label{selectors}
  521. XSelectors are used to control the use of a location.
  522. XIt is possible to share a mount map between many machines in
  523. Xsuch a way that filesystem location, architecture and operating
  524. Xsystem differences are hidden from the users.
  525. XA selector of the form {\tt arch==sun3;os==sos4} would only apply
  526. Xon Sun-3's running SunOS 4.$x$.
  527. XSelectors are evaluated left to right.  If a selector fails then that
  528. Xlocation is ignored.  Thus the selectors form a conjunction and the
  529. Xlocations form a disjunction.
  530. XIf all the locations are ignored or otherwise fail then \amd\ uses
  531. Xthe {\em error} filesystem (\see \Ref{error-fs}).  This is equivalent
  532. Xto having a location {\tt type:=error} at the end of each mount-map
  533. Xentry.
  534. XThe selectors currently implemented are:
  535. X\begin{list}{}%
  536. X{\settowidth{\labelwidth}{{\tt autodir}}\setlength{\leftmargin}{1.2\labelwidth}}
  537. X\item[\tt arch\hfill]
  538. Xthe machine architecture which was automatically determined at compile time.
  539. XThe architecture type can be displayed by running the command {\tt amd~-v}.
  540. XThe currently supported architectures are listed in table \ref{table:arch}.
  541. X\begin{table}[htb]
  542. X\centering
  543. X\begin{tabular}{ll}
  544. XName        & Architecture \\ \hline
  545. X\tt alliant    & Alliant FX/4 \\
  546. X\tt arm        & Acorn ARM \\
  547. X\tt encore      & Encore (reserved) \\
  548. X\tt hp9000    & HP 9000/300 family \\
  549. X\tt hp9k8       & HP 9000/800 family (reserved) \\
  550. X\tt ibm032    & IBM RT PC \\
  551. X\tt macII    & Apple Mac II \\
  552. X\tt mips    & MIPS R2000 \\
  553. X\tt multimax    & Encore Multimax \\
  554. X\tt orion105    & HLH Orion 1/05 \\
  555. X\tt powernode    & Gould Powernode family \\
  556. X\tt sun3    & Sun-3 family \\
  557. X\tt sun4    & Sun-4 family \\
  558. X\tt vax        & DEC \sc Vax \\
  559. X\end{tabular}
  560. X\caption{\label{table:arch}Architectures supported by \amd}
  561. X\end{table}
  562. X\item[\tt autodir\hfill]
  563. Xthe default directory under which to mount filesystems.
  564. XThis may be changed by the ``-a'' command line option.
  565. XSee the \opt{fs} option.
  566. X\item[\tt byte\hfill]\label{byte-selector}
  567. Xthe machine's byte ordering.  This is either {\tt little}, indicating
  568. Xlittle-endian, or {\tt big}, indicating big-endian.
  569. XOne possible use is to share {\tt rwhod} databases.
  570. XAnother is to share ndbm databases,
  571. Xhowever this use can be considered a courageous juggling act.
  572. X\item[\tt cluster\hfill]
  573. Xis provided as a hook for the name of the local cluster.  This can
  574. Xbe used to decide which servers to use for copies of replicated filesystems.
  575. X\Var{cluster} defaults to the value of \Var{domain} unless a different
  576. Xvalue is set with the ``-C'' command line option.
  577. X\item[\tt domain\hfill]
  578. Xthe local domain name as specified by the ``-d'' command line option.
  579. XSee {\tt host}.
  580. X\item[\tt host\hfill]
  581. Xthe local hostname as determined by {\bf gethostname}(2).
  582. XIf no domain name was specified on the command line
  583. Xand the hostname contains a period ``{\tt .}'' then the string
  584. Xbefore the period is used as the host name, and the string
  585. Xafter the period is assigned to \Var{domain}.
  586. XFor example, if the hostname is {\tt styx.doc.ic.ac.uk} the {\tt host}
  587. Xwould be {\tt styx} and {\tt domain} would be {\tt doc.ic.ac.uk}.
  588. X{\tt hostd} would be {\tt styx.doc.ic.ac.uk}.
  589. X\item[\tt hostd\hfill]
  590. Xis \Var{host} and \Var{domain} concatenated with a ``{\tt .}'' inserted between them
  591. Xif required.
  592. XIf \Var{domain} is an empty string then \Var{host} and \Var{hostd} will
  593. Xbe identical.
  594. X\item[\tt karch\hfill]
  595. Xis provided as a hook for the kernel architecture.  This is used
  596. Xby SunOS 4, for example to distinguish between different {\tt /usr/kvm} volumes.
  597. X\Var{karch} defaults to the value of \Var{arch} unless a different
  598. Xvalue is set with the ``-k'' command line option.
  599. X\item[\tt os\hfill]
  600. Xthe operating system.
  601. XLike the machine architecture, this is automatically determined at compile time.
  602. XThe operating system name can be displayed by running the command {\tt amd~-v}.
  603. XThe currently supported operating systems are listed in table \ref{table:os}.
  604. X\begin{table}[htb]
  605. X\centering
  606. X\begin{tabular}{ll}
  607. XName        & System \\ \hline
  608. X\tt acis43    & 4.3 BSD for IBM RT PC \\
  609. X\tt aux        & System V for Mac-II \\
  610. X\tt bsd44    & 4.4 BSD \\
  611. X\tt concentrix    & Concentrix 5.0 \\
  612. X\tt hlh42    & HLH OTS 1.$x$ (4.2 BSD) \\
  613. X\tt hpux    & HP-UX 6.$x$ \\
  614. X\tt riscix    & Acorn RISC iX \\
  615. X\tt sos3    & SunOS 3.4 \& 3.5 \\
  616. X\tt sos4    & SunOS 4.$x$ \\
  617. X\tt umax43    & Umax 4.3 BSD \\
  618. X\tt u2\_2    & Ultrix 2.2 \\
  619. X\tt u3\_0    & Ultrix 3.0 \\
  620. X\tt utx32    & Gould UTX/32 Rel 2.$x$ \\
  621. X\tt xinu43    & mt Xinu MORE/bsd \\
  622. X\end{tabular}
  623. X\caption{\label{table:os}Operating systems supported by \amd}
  624. X\end{table}
  625. X\end{list}
  626. XThe following selectors are also provided.  Unlike the other selectors,
  627. Xthey vary for each lookup.
  628. XNote that when the name from the kernel is expanded prior to a map
  629. Xlookup, these selectors are all defined as empty strings.
  630. X\begin{list}{}%
  631. X{\settowidth{\labelwidth}{{\tt autodir}}\setlength{\leftmargin}{1.2\labelwidth}}
  632. X\item[\tt key\hfill]
  633. Xthe name being resolved.
  634. XFor example, if {\tt /home} is an automount point, then accessing
  635. X{\tt /home/foo}\label{foo-path} would set \Var{key} to the string {\tt foo}.
  636. XThe key is prefixed by the \opt{pref} option set in the parent mount point.
  637. XThe default prefix is an empty string.  If the prefix was {\tt blah/} then
  638. X\Var{key} would be set to {\tt blah/foo}.
  639. X\item[\tt map\hfill]
  640. Xthe name of the mount map being used.
  641. X\item[\tt path\hfill]
  642. Xthe full pathname of the name being resolved.  For example {\tt /home/foo}
  643. Xin the example above.
  644. X\end{list}
  645. XSelectors can be negated by using {\tt !=} instead of {\tt ==}.
  646. XFor example to select a location
  647. Xon all non-{\sc Vax} machines the selector {\tt arch!=vax} would be used. 
  648. X\Subsection{Options}\label{options}
  649. XOptions are parsed concurrently with selectors.  The difference is that
  650. Xwhen an option is seen the string following the ``{\tt :=}'' is recorded for
  651. Xlater use.  As a minimum the \opt{type} option must be specified.
  652. XEach filesystem type has other options which must also be specified.
  653. XThe filesystem specific options are detailed in \Ref{filesystems}.
  654. XThe following options apply to more than one filesystem type:
  655. X\begin{list}{}
  656. X{\settowidth{\labelwidth}{{\tt sublink}}\setlength{\leftmargin}{1.2\labelwidth}}
  657. X\item[\tt delay\hfill]
  658. Xthe delay, in seconds, before an attempt will be made to mount from the current location.
  659. XAuxilliary data, such as network address, file handles and so on are computed
  660. Xregardless of this value.
  661. XA delay can be used to implement the notion of primary and secondary file servers.
  662. XThe secondary servers would have a delay of a few seconds,
  663. Xthus giving the primary servers a chance to respond first.
  664. X\item[\tt fs\hfill]\label{mount location}
  665. Xthe local mount point.
  666. XThe semantics of this option vary between filesystems.
  667. XFor \NFS\ and \UFS\ filesystems the value of \Var{fs} is used as the local
  668. Xmount point.  It is important that this string uniquely identifies the
  669. Xfilesystem being mounted.  To satisfy this requirement, it should contain the
  670. Xname of the host on which the filesystem is resident and the pathname
  671. Xof the filesystem on the local or remote host.
  672. XThe reason for
  673. Xrequiring the hostname is clear if replicated filesystems are considered.
  674. XIf a fileserver goes down and a replacement filesystem is mounted then the {\em local}
  675. Xmount point {\em must} be different from that of the filesystem which
  676. Xis hung.
  677. XSome encoding of the filesystem name is required if more than one filesystem
  678. Xis to be mounted from any given host.
  679. XIf the hostname is first in the path then all mounts from a particular
  680. Xhost will be gathered below a single directory.  If that server goes
  681. Xdown then the hung mount points are less likely to be accidentally referenced,
  682. Xfor example when {\bf getwd}(3) traverses the namespace to find the pathname
  683. Xof the current directory.
  684. XThe {\tt fs} defaults to \Var{autodir}/\Var{rhost}\Var{rfs}.
  685. XIn addition, {\tt rhost} defaults to the local host name (\Var{host}) and
  686. X{\tt rfs} defaults to the value of \Var{path}, which
  687. Xis the full path of the requested file; {\tt /home/foo}
  688. Xin the example above (\see \Ref{foo-path}).
  689. X\Var{autodir} defaults to {\tt /a} but may be changed with the ``-a''
  690. Xcommand line option\footnote{Sun's automounter defaults to {\tt /tmp\_mnt}}.
  691. XNote that there is no ``{\tt /}'' between the \Var{rhost} and \Var{rfs} since
  692. X\Var{rfs} begins with a ``{\tt /}''.
  693. X\item[\tt opts\hfill]
  694. Xthe options to pass to the mount system call.
  695. XA leading ``{\tt -}'' is silently ignored.
  696. XThe mount options supported generally correspond to
  697. Xthose used by {\bf mount}(8) and are listed in table \ref{table:mount opts}.
  698. XSome additional pseudo-options are interpreted by \amd\ and
  699. Xare listed in table \ref{table:pseudo-mount opts}.
  700. XUnless specifically overridden, each of the system default mount
  701. Xoptions applies.
  702. XAny options not recognised are ignored.
  703. XIf no options list is supplied the string {\tt rw,defaults} is used
  704. Xand all the system default mount options apply.
  705. X\begin{table}[htb]
  706. X\centering
  707. X\begin{tabular}{lp{4in}}
  708. XOption        & Semantics \\\hline
  709. X\tt grpid    & Use BSD directory group-id semantics. \\
  710. X\tt intr    & Allow keyboard interrupts on hard mounts. \\
  711. X\tt nodevs    & Don't allow local special devices on this filesystem. \\
  712. X\tt nosuid    & Don't allow set-uid or set-gid executables on this filesystem. \\
  713. X\tt quota    & Enable quota checking on this mount. \\
  714. X\tt retrans=$n$    & The number of \NFS\ retransmits made before a user error is generated
  715. X          by a {\tt soft} mounted filesystem, and before a
  716. X          {\tt hard} mounted filesystem reports {\tt NFS server {\em yoyo}
  717. X          not responding still trying}. \\
  718. X\tt ro        & Mount this filesystem readonly. \\
  719. X\tt soft    & Give up after {\em retrans} retransmissions. \\
  720. X\tt timeo=$n$    & The \NFS\ timeout, in tenth-seconds, before a request is retransmitted. \\
  721. X\end{tabular}
  722. X\caption{Mount options passed to the mount system call\label{table:mount opts}}
  723. X\end{table}
  724. X\begin{table}[htb]
  725. X\centering
  726. X\begin{tabular}{lp{4in}}
  727. XOption        & Semantics \\\hline
  728. X\tt notimeout    & Configures the mount so that its time-to-live will
  729. X          never expire.  This is also the default for some
  730. X          filesystem types. \\
  731. X% Implementation broken:
  732. X%\tt ping=$n$    & The interval, in seconds, between keep-alive pings.  When four
  733. X%          consecutive pings have failed the mount point is
  734. X%          marked as hung.  This interval defaults to 3 seconds.  \\
  735. X\tt retry=$n$    & The number of times to retry the mount system call. \\
  736. X\tt utimeout=$n$& The interval, in seconds, by which the mount's
  737. X          time-to-live\label{opt:utimeout}
  738. X          is extended after an unmount attempt has failed.
  739. X          In fact the interval is extended before the unmount
  740. X          is attempted to avoid thrashing. \\
  741. X\end{tabular}
  742. X\caption{Mount options interpreted by \amd\label{table:pseudo-mount opts}}
  743. X\end{table}
  744. X\item[\tt sublink\hfill]
  745. Xthe subdirectory within the mounted filesystem to which the reference
  746. Xshould point.
  747. XThis can be used to prevent duplicate mounts in cases where multiple
  748. Xdirectories in the same mounted filesystem are used.
  749. X\item[\tt type\hfill]
  750. Xthe filesystem type to be used.  A full description of each
  751. Xtype is given in \Ref{filesystems}.
  752. X\end{list}
  753. XSuperfluous option specifications are ignored and are not reported
  754. Xas errors.
  755. X\Chapter{Command Line Options}
  756. XMany of \amd's parameters can be set from the command line.
  757. XThe command line is also used to specify automount points
  758. Xand maps.
  759. XThe general format of a command line is
  760. X\begin{quote}
  761. X{\tt amd} {\em options} directory map-name [{\tt -}{\em map-options}] \ldots
  762. X\end{quote}
  763. XFor each directory and map-name given, \amd\ establishes an automount point.
  764. X%In addition, unless the ``-m'' option is given (see below), \amd\ enumerates
  765. X%the YP maps {\tt am.master} and {\tt auto.master} to obtain a further list of
  766. X%automount points to create.
  767. XThe {\em map-options} may be any sequence of options or selectors as described
  768. Xin \Ref{opts:values}.
  769. XThe {\em map-options} apply only to \amd's mount point.  Default options for
  770. Xa map are read from a special entry in the map whose key is the string
  771. X{\tt /defaults}.
  772. XWhen default options are given they are prepended to any
  773. Xoptions specified in the mount-map locations as explained in \Ref{/defaults}.
  774. XThe {\em options} are any combination of the following:
  775. X\begin{description}
  776. X\item[\tt -a \em directory]\mbox{}\\
  777. Xspecifies the default mount directory.
  778. XThis option changes the variable \Var{autodir} which
  779. Xotherwise defaults to {\tt /a}.
  780. XFor example, some sites prefer {\tt /am}.
  781. X\begin{quote}
  782. Xamd -a /am ...
  783. X\end{quote}
  784. X\item[\tt -c \em cache-interval]\mbox{}\\
  785. Xselects the period for which a name is cached by \amd.  If no
  786. Xreference is made to the filesystem in this period,
  787. X\amd\ attempts to unmount the filesystem.
  788. XIf the unmount fails the interval is extended by a further period
  789. Xas specified by the {\tt -w} command line option or by the {\tt utimeout} mount option.
  790. XThe default {\em cache-interval} is five minutes.
  791. X\item[\tt -d \em domain]\mbox{}\\
  792. Xspecifies the host's domain.  This sets the internal variable \Var{domain}
  793. Xand affects the \Var{hostd} variable.
  794. XIf this option is not specified and
  795. Xthe hostname already contains the local domain then that is
  796. Xused, otherwise the default value of \Var{domain} is {\tt unknown.domain}.
  797. XFor example, if the local domain was {\tt doc.ic.ac.uk}, \amd\ could be
  798. Xstarted as follows:
  799. X\begin{quote}
  800. Xamd -d doc.ic.ac.uk ...
  801. X\end{quote}
  802. X\item[\tt -k \em kernel-architecture]\mbox{}\\
  803. Xspecifies the kernel architecture of the system.  This is usually
  804. Xthe output of {\tt arch -k} and its only effect is to set the
  805. Xvariable \Var{karch}.  If this option is not given, \Var{karch}
  806. Xhas the same value as \Var{arch}.
  807. XThis would be used as follows:
  808. X\begin{quote}
  809. Xamd -k `arch -k` ...
  810. X\end{quote}
  811. X\item[\tt -l \em log-option]\mbox{}\\
  812. Xselects the form of logging to be made.
  813. XTwo special {\em log-option}s are recognised.
  814. XIf {\em log-option} is the string {\tt syslog}, \amd\ will use
  815. Xthe {\bf syslog}(3) mechanism.
  816. XIf {\em log-option} is the string {\tt /dev/stderr}\footnote{
  817. XThis pathname is interpreted internally by \amd; a {\tt /dev/fd}
  818. Xdriver is not required.
  819. X}, \amd\ will use
  820. Xstandard error which is also the default value.
  821. XAny other string is taken as a filename to
  822. Xuse for logging.  Log messages are appended to the file if it already
  823. Xexists, otherwise a new file is created.
  824. XIf the syslog option is specified but the system does not support syslog or
  825. Xif the named file cannot be opened or created, \amd\ will use standard error.
  826. XError messages generated before \amd\ has finished parsing the command line
  827. Xare printed on standard error.
  828. XUsing {\tt syslog} is usually best, in which case \amd\ would be
  829. Xstarted as follows:
  830. X\begin{quote}
  831. Xamd -l syslog ...
  832. X\end{quote}
  833. X%\item[\tt -m]\mbox{}\\
  834. X%is an obsolete option that was the equivalent of appending
  835. X%{\tt `ypcat -k am.master`} to the command line.
  836. X%tells \amd\ {\em not} to obtain a list of automount points from Yellow Pages.
  837. X%By default, \amd\ attempts to enumerate the YP maps {\tt am.master} and {\tt auto.master}.
  838. X%The default YP domain is used unless the ``-y'' option is given.
  839. X%{\em This option will be removed in the next release.}
  840. X\item[\tt -n]\mbox{}\\
  841. Xnormalises the remote hostname before using it.
  842. XNormalisation is done by replacing the value of \Var{rhost} with the primary name returned by
  843. Xa hostname lookup.
  844. XThis option should be used if several names are used to refer to a single host in a
  845. Xmount map.
  846. X\item[\tt -p]\mbox{}\\
  847. Xcauses \amd's process id to be printed on standard output.
  848. XThis can be redirected to a suitable file for use with kill:
  849. X\begin{quote}
  850. Xamd -p > /etc/amd.pid ...
  851. X\end{quote}
  852. X\item[\tt -r]\mbox{}\\
  853. Xtells \amd\ to restart existing mounts (see the Inheritance File System \Ref{ifs}).
  854. X%{\em This option will be made the default in the next release.}
  855. X\item[\tt -t \em afs-timeout.afs-retransmit]\mbox{}\\
  856. Xspecifies the RPC timeout and retransmit intervals used by the kernel to communicate
  857. Xto \amd.  These are used to set the {\tt timeo} and {\tt retrans} mount options.
  858. X\Amd\ relies on the kernel RPC retry mechanism to trigger mount retries.  The
  859. Xvalue of this parameter changes the retry interval.  Too long an interval
  860. Xgives poor interactive response, too short an interval causes excessive
  861. Xretries.
  862. X\item[\tt -v]\mbox{}\\
  863. Xprint version information on standard error and then exit.
  864. XThe output is of the form:
  865. X\begin{verbatim}
  866. XAmd 5.0.1.8 of 89/10/23 12:22:00 beta20 #37: Wed Nov  1 11:03:09 GMT 1989
  867. XBuilt by jsp@charm.doc.ic.ac.uk for a sun4 running sos4 (big-endian)
  868. XMap support for: root, hesiod, yp, ndbm, file, error.
  869. X\end{verbatim}
  870. XThe information includes the version number, release date and name
  871. Xof the release.
  872. XThe architecture (\see \Ref{table:arch}), operating system (\see \Ref{table:os})
  873. Xand byte ordering are also printed as they appear in the \Var{os},
  874. X\Var{arch} and \Var{byte} variables.
  875. X\item[\tt -w \em wait-timeout]\label{opt:wait}\mbox{}\\
  876. Xselects the interval between unmount attempts after
  877. Xthe initial time-to-live has expired.
  878. XThis defaults to 120 seconds.
  879. X\item[\tt -x \em opts]\mbox{}\\
  880. Xspecifies the type and verbosity of log messages.  {\em opts} is
  881. Xa comma separated list selected from the options in table \ref{table:x opts}.
  882. X\begin{table}[htb]
  883. X\centering
  884. X\begin{tabular}{ll}
  885. XLog option  & Messages logged \\\hline
  886. X\tt fatal   & Fatal errors \\
  887. X\tt error   & Non-fatal errors \\
  888. X\tt user    & Non-fatal user errors \\
  889. X\tt warn    & Recoverable errors \\
  890. X\tt warning & Alias for \tt warn \\
  891. X\tt info    & Information messages \\
  892. X\tt map     & Mount map usage \\
  893. X\tt all     & All of the above \\
  894. X\end{tabular}
  895. X\caption{Logging options\label{table:x opts}}
  896. X\end{table}
  897. XThe default logging option is {\tt -x~all,nomap}.
  898. XIn general production use, the
  899. Xoption {\tt -x~fatal,error} is most useful.  The {\tt info} messages
  900. Xinclude details of what is mounted and unmounted and when filesystems
  901. Xhave timed out.  The messages given by {\tt user} relate to errors
  902. Xin the mount maps, so these are useful when new maps are installed.
  903. XThe options can be prefixed by the string {\tt no} to indicate
  904. Xthat this option should be turned off.  For example, to obtain all
  905. Xbut {\tt info} messages the option {\tt -x~all,noinfo} would be used
  906. Xor, since {\tt -x~all} is the default, simply {\tt -x~noinfo}.
  907. X\item[\tt -y \em yp-domain]\mbox{}\\
  908. Xselects an alternate YP domain.  This is useful for debugging and
  909. Xcross-domain shared mounting.
  910. XIf this flag is specified, \amd\ immediately attempts to
  911. Xbind to a server for this domain.
  912. X%\Amd\ refers to YP maps when it starts, unless the ``-m'' option
  913. X%is specified, and whenever required in a mount map.
  914. X\item[\tt -C \em cluster-name]\mbox{}\\
  915. Xspecifies the name of the cluster of which the local machine is a member.
  916. XThe only effect is to set the variable \Var{cluster}.
  917. XThe {\em cluster-name} is will usually obtained by running another command which uses
  918. Xa database to map the local hostname into a cluster name.
  919. X\Var{cluster} can then be used as a selector to restrict mounting of
  920. Xreplicated data.
  921. XIf this option is not given, \Var{cluster} has the same value as \Var{domain}.
  922. XThis would be used as follows:
  923. X\begin{quote}
  924. Xamd -C `clustername` ...
  925. X\end{quote}
  926. X\item[\tt -D {\em opts}]\mbox{}\\
  927. Xcontrols the verbosity and coverage of the debugging trace;
  928. X{\em opts} is a comma separated list of debugging options.
  929. XThe ``-D'' option is only available if \amd\ was compiled with {\tt -DDEBUG}.
  930. XThe memory debugging facilities are
  931. Xonly available if \amd\ was compiled with {\tt -DDEBUG\_MEM}
  932. X(in addition to {\tt -DDEBUG}).
  933. XThe most common options to use are {\tt -D~trace} and {\tt -D~test}
  934. X(which turns on all the useful debug options).
  935. XSee the program source for a more detailed explanation of the available options.
  936. X\end{description}
  937. XWhen the command line has been parsed, the automount points are mounted.
  938. XThe mount points are created if they do not already exist, in which case they
  939. Xwill be removed when \amd\ exits.
  940. XFinally, \amd\ disassociates itself from its controlling terminal and
  941. Xforks into the background.
  942. X{\em Note\/}: Even if \amd\ has been built with {\tt -DDEBUG} it
  943. Xwill still background itself and disassociate itself from the controlling terminal.
  944. XTo use a debugger it is necessary to
  945. Xspecify {\tt -D~nodaemon} on the command line.
  946. X\Chapter{Filesystems}\label{filesystems}
  947. XFrom the point of view of \amd, a {\em filesystem} is anything
  948. Xthat can resolve an incoming name lookup.
  949. XAn important feature is support for multiple filesystem types.
  950. XSome of these filesystems are implemented in
  951. Xthe local kernel and some on remote fileservers, whilst the others are implemented
  952. Xinternally by \amd.
  953. XThe two common filesystem types are \UFS\ and \NFS.
  954. XFour other user accessible filesystems ({\tt link}, {\tt program}, {\tt auto}
  955. Xand {\tt direct}) are also implemented
  956. Xinternally by \amd\ and these are described below.
  957. XThere are two additional filesystem
  958. Xtypes internal to \amd\ which are not directly accessible
  959. Xto the user ({\tt inherit} and {\tt error}).  Their use is described since they may
  960. Xstill have an effect visible to the user.
  961. X\Section[Network Filesystem]{Network Filesystem ({\tt type:=nfs})}
  962. XThe {\em nfs} filesystem type provides access to Sun's \NFS.
  963. XThe following options may be specified:
  964. X\begin{description}
  965. X\item[\tt rhost]
  966. Xthe remote fileserver.  This must be an entry in the hosts database.
  967. XIP addresses \cite{rfc:ip} are not accepted.
  968. XThe default value is taken from the local host name (\Var{host})
  969. Xif no other value is specified.
  970. X\item[\tt rfs]
  971. Xthe remote filesystem.
  972. XIf no value is specified for this option, an internal default of
  973. X\Var{path} is used.
  974. X\end{description}
  975. X\NFS\ mounts require a two stage process.  First, the {\em file handle} of
  976. Xthe remote file system must be obtained from the server.  Then a mount
  977. Xsystem call must be done on the local system.
  978. X\Amd\ keeps a cache of file handles for remote file systems.  The cache
  979. Xentries have a lifetime of a few minutes.
  980. XIf a required file handle is not in the cache, \amd\ sends a request
  981. Xto the remote server to obtain it.  \Amd\ {\em does not} wait for
  982. Xa response; it notes that one of the locations needs retrying, but
  983. Xcontinues with any remaining locations.  When the file handle becomes
  984. Xavailable, and assuming none of the other locations was successfully
  985. Xmounted, \amd\ will retry the mount.  This mechanism allows several
  986. X\NFS\ filesystems to be mounted in parallel\footnote{The mechanism
  987. Xis general, however \NFS\ is the only filesystem
  988. Xfor which the required hooks have been written.}.
  989. XThe first one which
  990. Xresponds with a valid file handle will be used.
  991. XAn \NFS\ entry might be:
  992. X\begin{quote}
  993. Xjsp\ \ host!=charm;type:=nfs;rhost:=charm;rfs:=/home/charm;sublink:=jsp
  994. X\end{quote}
  995. XThe mount system call and any unmount attempts are always done
  996. Xin a new task to avoid the possibilty of blocking \amd.
  997. X\Section[\Unix\ Filesystem]{\Unix\ Filesystem ({\tt type:=ufs})}
  998. XThe {\em ufs} filesystem type provides access to the system's
  999. Xstandard disk filesystem---usually the Berkeley Fast Filesystem \cite{bsd:ufs}.
  1000. XThe following option must be specified:
  1001. X\begin{description}
  1002. X\item[\tt dev]
  1003. Xthe block special device to be mounted.
  1004. X\end{description}
  1005. XA \UFS\ entry might be:
  1006. X\begin{quote}
  1007. Xjsp\ \ \ host==charm;type:=ufs;dev:=/dev/xd0g;sublink:=jsp
  1008. X\end{quote}
  1009. X\Section[Program Filesystem]{Program Filesystem ({\tt type:=program})}\label{pfs}
  1010. XThe {\em program} filesystem type allows a program to be run
  1011. Xwhenever a mount or unmount is required.  This allows easy
  1012. Xaddition of support for other filesystem types, such as MIT's
  1013. XRemote Virtual Disk (RVD) \cite{mit:rvd} which has a programmatic interface via
  1014. Xthe commands {\tt rvdmount} and {\tt rvdunmount}.
  1015. XThe following options must be specified:
  1016. X\begin{description}
  1017. X\item[mount]
  1018. Xthe program which will perform the mount.
  1019. X\item[unmount]
  1020. Xthe program which will perform the unmount.
  1021. X\end{description}
  1022. XThe exit code from these two programs is interpreted as a \Unix\ error
  1023. Xcode.  As usual, exit code zero indicates success.
  1024. XTo execute the program \amd\ splits the string on whitespace to
  1025. Xcreate an array of substrings.
  1026. XSingle quotes ``{\tt '}'' can be used to quote whitespace if that is
  1027. Xrequired in an argument.  There is no way to escape or change the quote character.
  1028. XTo run the program {\tt rvdmount} with a host name and filesystem as
  1029. Xarguments would be specified by {\tt mount:="/etc/rvdmount rvdmount fserver \$\{path\}"}.
  1030. XThe first element in the array is taken as the pathname of the program
  1031. Xto execute.  The other members of the array form the argument vector
  1032. Xto be passed to the program, {\em including argument zero}.  This means
  1033. Xthat the split string must have at least two elements.
  1034. XThe program is directly executed by \amd, not via a shell.
  1035. END_OF_FILE
  1036. if test 49780 -ne `wc -c <'doc/amd.tex.1'`; then
  1037.     echo shar: \"'doc/amd.tex.1'\" unpacked with wrong size!
  1038. # end of 'doc/amd.tex.1'
  1039. echo shar: End of archive 13 \(of 13\).
  1040. cp /dev/null ark13isdone
  1041. MISSING=""
  1042. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 ; do
  1043.     if test ! -f ark${I}isdone ; then
  1044.     MISSING="${MISSING} ${I}"
  1045.     fi
  1046. if test "${MISSING}" = "" ; then
  1047.     echo You have unpacked all 13 archives.
  1048.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1049.     echo You still need to unpack the following archives:
  1050.     echo "        " ${MISSING}
  1051. ##  End of shell archive.
  1052. exit 0
  1053. exit 0 # Just in case...
  1054.